2011-04-21 154 views
2

我有以下批處理文件來查找和刪除文本文件中的字符串。該文本文件將在以下格式來:在批處理文件中查找/替換文本時如何處理&符號?

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

使用'^'來轉義特殊字符(如&符號),即'^&'。 – 0xC0000022L 2011-04-21 13:36:03

+0

我無法控制輸入。 – ntsue 2011-04-21 13:39:15

+0

是的。例如在你的'Change'子裏面。使用字符串替換。雖然我不確定這會在這裏有所作爲。 – 0xC0000022L 2011-04-21 13:46:48

回答

5

你應該enquote命令,如set,爲了躲避&和其他特殊字符。
並使用延遲擴展,因爲延遲擴展,特殊字符被忽略。
在執行塊之前評估百分比展開,因此您的for-loop無法按預期工作。

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

+1,在分配'%〜1'時完全錯過了這個事實。 – 0xC0000022L 2011-04-21 14:06:32

+0

非常感謝! :d – ntsue 2011-04-21 14:35:49