如何用批量更改项目中的特定string

我正在开发一个应用程序。 整个项目必须改变一些path。 path是固定的,文件可以被编辑(它在.cshtml )。

所以我想我可以使用一个batch file来将所有http://localhost.com更改为http://domain.com (我知道相对path和绝对path,但是在这里我必须这样做。

我想在许多计算机上使用这个脚本,所以我不想安装一个应用程序,并用脚本使用该应用程序…只要运行.bat就是这样…

所以,如果你有代码,可以在文件中进行更改,这可能是了不起的!

为了完成我的问题,这里是文件和目录的path

 MyApp的
 MyApp的/浏览次数
 MyApp的/浏览/首页/ page1.cshtml
 MyApp的/浏览/首页/ page2.cshtml
 MyApp的/浏览/另一/ page7.cshtml
 ...

Solutions Collecting From Web of "如何用批量更改项目中的特定string"

你可以使用GNU Win32 sed来达到这个目的:

 for /r "MyApp/Views" %%a in (*.cshtml) do sed -ibak "s#http://localhost\.com#http://domain.com#g" "%%~a" 

for /r循环以递归方式搜索所有文件夹, sed更改所有*.cshtml文件中的URL。 它也使备份副本*.bak


批量安全性要低得多,但如果你想 – 这里是我的批量建议:

 @echo OFF &SETLOCAL SET "fpath=MyApp\Views" SET "newext=.new" SET "fname=" for /r "%fpath%" %%a in (*.cshtml) DO SET "fname=%%~a"&CALL:process goto:eof :process (FOR /f "delims=" %%b IN ('findstr /n "^" "%fname%"') DO ( SET "line=%%b" SETLOCAL ENABLEDELAYEDEXPANSION SET "line=!line:*:=!" IF "!line:http://localhost.com=!" neq "!line!" ( SET "line=!line:http://localhost.com=http://domain.com!" ) ECHO(!line! ENDLOCAL ))>"%fname%%newext%" goto:eof 

怎么运行的:

  • 第一个for循环:递归地读取startfolder的目录,将文件名连续放在一个变量中,并为每个文件调用一个子例程process
  • 第二个循环:使用findstr逐行读取文件以保留空行。 如果出现,请将所有http://localhost.com替换为http://domain.com ,并将行写入新文件。

使用的变量:

  • 要处理的文件的%fpath%路径,默认MyApp\Views
  • 新文件的%newext%扩展名,默认为.new

优点:

  • findstr保留空行
  • 在第二个循环中保留感叹号
  • 通过使用全局变量保存文件名中的百分号%

问题:

  • Windows命令外壳语言( WCSL ,又名'批')不能处理多于8191个字符的行,而不是HTML内容
  • 好吧,批次不是赛车,而是取决于你的内容的数量,这可能是一个真正的夜间工作

祝你好运!

下面的混合批处理JScript文件可以以比任何纯批处理解决方案快得多的方式解决您的问题。 别担心! 这是一个批处理.BAT解决方案,所以你不需要安装任何东西,以便在Windows XP或后续版本的任何计算机上运行它。

 @if (@CodeSection == @Batch) @then @echo off for /R "\MyApp\Views" %%a in (*.cshtml) do ( < "%%a" CScript //nologo //E:JScript "%~F0" > "%%a.repl" ) goto :EOF @end // JScript section WScript.Stdout.Write(WScript.StdIn.ReadAll().replace(/http:\/\/localhost\.com/g,"http://domain.com")); 

以前的程序会生成输入文件名称相同的输出文件,并附加一个.repl扩展名。 当然,原始文件可以被删除,所以如果你愿意的话,新的文件将被替换掉。 此外,可以实现对该文件使用形式的任何修改; 例如,在批处理文件参数中给出替换的原始字符串和新字符串。