2011-03-15 59 views
1

我正在嘗試讀取所有文件並將其替換爲子字符串。 當我執行批處理文件僅第一個命令執行 即SET modified=!string:%oldstr1%=%newstr1%!無法修改bat文件中的多個字符串

其餘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 

) 

回答

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! 
) 
+0

感謝我沒有得到這個想法:) – Enosh