无法在bat文件中修改多个字符串

时间:2011-03-15 12:22:25

标签: batch-file

我正在尝试读取所有文件并替换其中的子字符串。 当我执行bat文件时,只有第一个命令执行 即SET modified=!string:%oldstr1%=%newstr1%!

休息2个命令不执行

SET modified=!string:%oldstr2%=%newstr2%!

SET modified=!string:%oldstr3%=%newstr3%!

代码如下:

@echo off

setlocal enabledelayedexpansion

set LOCATION=D:\CODE_temp\RUNTIME_DATA\

set OUTTEXTFILE=test_out.txt

set oldstr1=workflow.actions

set newstr1=process.activities

set oldstr2=CallWorkflow

set newstr2=CallProcess

set oldstr3=SetWorkflowVariable

set newstr3=SetProcessVariable


FOR /r %LOCATION% %%x IN (*.txt) do (

FOR /f "tokens=1,* delims=¶" %%A in ('"type %%x"') do (

SET string=%%A

SET modified=!string:%oldstr1%=%newstr1%!

SET modified=!string:%oldstr2%=%newstr2%!

SET modified=!string:%oldstr3%=%newstr3%!

echo !modified! >> %OUTTEXTFILE%
)

del %%x

copy %OUTTEXTFILE% %%x

del %OUTTEXTFILE%

echo location  %%x >> Enosh_log.txt

)

1 个答案:

答案 0 :(得分:0)

嗯,你有什么期望? 您始终会替换原始string中的字符串,并将其设置为modified变量 所以你总是覆盖同一个变量。

最好你应该使用这样的东西

FOR /f "tokens=1,* delims=¶" %%A in ('"type %%x"') do (
  SET "string=%%A"
  SET "modified=!string:%oldstr1%=%newstr1%!"
  SET "modified=!modified:%oldstr2%=%newstr2%!"
  SET "modified=!modified:%oldstr3%=%newstr3%!"
   >> %OUTTEXTFILE% echo !modified!
)