如何使用批处理脚本更改多个html文件中的图像标记网址?

时间:2013-07-11 02:26:43

标签: batch-file

有超过10个带图像标记的html文件。每次我们将构建部署到测试站点时,我们都需要更改img源。例如<img src=/live/Content/xyz.png />
<img src=/test/Content/xyz.png /> 环顾四周并阅读了一段时间之后,我想出了以下批处理脚本,但是我无法弄清楚如何从这里继续前进:

for /r %%i in (*.html) do echo %%i    
for %%f in (*.html) do ( 
FOR /F %%L IN (%%f) DO (
  SET "line=%%L"
  SETLOCAL ENABLEDELAYEDEXPANSION 
  SET "x=     <--------------------WHAT DO I SET HERE?
  echo %x%
  ENDLOCAL  )) pause    

这是我的第一个批处理脚本,有人可以指导我朝正确的方向发展吗?

1 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL enabledelayedexpansion
for /r U:\ %%i in (*.html) do (
 echo found %%i    
 SET outfile="%%~dpni.lmth"
 (
  SETLOCAL disabledelayedexpansion
  FOR /F "usebackq delims=" %%L IN ("%%i") DO (
   SET "line=%%L"
   SETLOCAL ENABLEDELAYEDEXPANSION 
   SET "line=!line:/live/=/test/!
   echo !line!
   ENDLOCAL  
  )
  ENDLOCAL  
 )>!outfile!
)
pause
GOTO :EOF

这种发展怎么样?

注意: 我已将FOR/R修改为ECHO正在处理的HTML文件,并使用%%i而非切换为%%fU:是我的RAMDRIVE;你需要修改它以适应。

outfile设置为生成与HTML文件名匹配但带有.lmth扩展名(无法就地更新)的文件名 - 它从~dpn前缀获取i,表示文件d的{​​{1}}铆钉,pn ame。引用它来处理文件名或路径名中的潜在空格。

下一个逻辑语句是%%i,它将任何(for /f...[lines] )>!outfile! ed文本发送到新文件echo。批处理的第二个物理行中的!outfile!使enabledelayedexpansion成为RUN-TIME值 - 因为它在!outfile!外循环中发生了变化。

由于%% i中的实际HTML文件名可能包含空格,因此需要引用它,因此FOR r中的'usebackq'子句。 FOR/F子句确保文件delims=中的ENTIRE行应用于"%%i" - 而不仅仅是第一个令牌(实际上,将整行作为第一个令牌)。

%%L命令将字符串“/ test /”替换为变量SET的RUN-TIME值中出现的“/ live /”,并将结果赋给{{1} }。然后,结果值为line d - 重定向到line

请注意,在您的原始文件中,您将在ECHO中分配outfile,但x会在该行为PARSED时再现set x=,因为批量替代%var%的任何变量的值作为解析阶段的一部分。因此,该行只会变为echo %x%(因为x可能会被取消分配)并且奇怪地会报告ECHO州(x

这里有几个gatchas。首先,echo和其他一些字符很难用批处理来处理,所以要小心。接下来,Echo is OFF将绕过空行。如果需要,可以克服这个问题。第三,这将在任何情况下用%

替换FOR/F的任何事件 祝你好运!


编辑以支持感叹号:20130711T0624Z

/live/之前添加/test/行和SETLOCAL enabledelayedexpansion以匹配