在批处理文件中查找/替换文本时如何处理&符号?

时间:2011-04-21 13:18:30

标签: windows batch-file

我有以下批处理文件来查找和删除文本文件中的字符串。文本文件将采用以下格式:

079754,Billing & Business Adv..,E:\MyDirectory\079754_35931_Billing & Business Adv...pdf,Combined PDF

我只想从文件中删除“E:\ MyDirectory \”,然后将文件移动到子目录中。我的批处理文件按预期工作,除了文件中有一个&符号的情况(例如上面的一个)..

而不是我的结果文件包含:

079754,Billing & Business Adv..,Billing & Business Adv...pdf,Combined PDF

它包含,

079754,Billing 

我对编写批处理文件有些新意,我知道&符号会以某种方式影响标记化。任何帮助将不胜感激!

批处理文件:

@echo off
cd C:\Temp\broker
for %%f in (*.dat) do (
    if exist newfile.txt del newfile.txt
    FOR /F "tokens=* delims=" %%a in (%%f) do @call :Change "%%a"
    del %%f
    rename newfile.txt %%f
    move %%f "import\%%f"
)

exit /b
pause

:Change
set Text=%~1
set Text=%Text:E:\MyDirectory\=%

FOR /F "tokens=3 delims=," %%d in ("%Text%") do @set File=%%d
(echo %Text%)>> newfile.txt
move "%File%" "import\%File%"
exit /b

1 个答案:

答案 0 :(得分:5)

您应该引用set之类的命令来逃避&和其他特殊字符。
并使用延迟扩展,与延迟扩展一样,忽略特殊字符 并且在执行块之前评估百分比扩展,因此您的for循环无法按预期工作。

setlocal EnableDelayedExpansion
...

:Change
set "Text=%~1"
set "Text=!Text:E:\MyDirectory\=!"

FOR /F "tokens=3 delims=," %%d in ("!Text!") do @set File=%%d
(echo !Text!)>> newfile.txt
move "!File!" "import\!File!"
exit /b