cle*_*ent 3 windows batch-file batch-processing
我正在开发一个应用程序.必须在整个项目中更改某条路径.路径是固定的,文件可以编辑(它在.cshtml).
因此,我认为我可以使用一个批处理文件来改变所有的http://localhost.com到http://domain.com例如(我知道的相对和绝对路径,但在这里我不得不做出这样的.
我想在许多计算机上使用这个脚本,所以我不想安装应用程序并将该应用程序与脚本一起使用...只需运行.bat即可...
因此,如果你有可以在文件中进行更改的代码,那就太棒了!
要完成我的问题,这里是文件和目录的路径
MyApp MyApp/Views MyApp/Views/Index/page1.cshtml MyApp/Views/Index/page2.cshtml MyApp/Views/Another/page7.cshtml ...
您可以使用GNU Win32 sed:
for /r "MyApp/Views" %%a in (*.cshtml) do sed -ibak "s#http://localhost\.com#http://domain.com#g" "%%~a"
Run Code Online (Sandbox Code Playgroud)
该for /r循环递归搜索所有的文件夹和sed改变的URL中的所有*.cshtml文件.它还制作备份副本*.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
Run Code Online (Sandbox Code Playgroud)
这个怎么运作:
for循环:递归读取起始文件夹的目录,将文件名连续放入变量中,并process 为每个文件调用子例程.for循环:逐行读取文件,findstr用于保留空行.将all替换http://localhost.com为http://domain.com如果出现并将行写入新文件.使用的变量:
%fpath% 要处理的文件的路径,默认 MyApp\Views%newext% 新文件的扩展名,默认 .new优点:
findstrdelayed expansion第二个for 循环中的toggeling 来保留感叹号%通过使用全局变量保留文件名中的百分号问题:
祝好运!
| 归档时间: |
|
| 查看次数: |
242 次 |
| 最近记录: |