我想使用一个简单的Windows Batch文件进行文本搜索并在许多文件中替换。我的问题是:我不知道从可能包含特殊变量/字符的目标文件中读取行时如何避免内插变量。
例如,对于包含以下行(包括 !time!
和 ^^!
)的目标文件 test.txt:
bbb aaaa bbb
!time!
bbb
^^!
对于这样的批处理文件:
@echo off
setlocal EnableDelayedExpansion
set SEARCH=a
set REPLACE=x
set FILE=test.txt
for /f "delims=" %%A in (%FILE%) DO (
set line=%%A
set line=!line:%SEARCH%=%REPLACE%!
echo !line!
)
我得到以下输出:
bbb xxxx bbb
18:51:27.00
bbb
^
但我想要这个输出(保留!time!
和^^!
):
bbb xxxx bbb
!time!
bbb
^^!
有什么技巧可以避免插值,同时仍然使用简单的 Windows 批处理脚本?
读取过程中未出现问题。当您尝试展开%%A
的值并启用了延迟扩展时,会发生这种情况。这是一个问题,因为延迟扩展发生在 FOR 变量扩展之后。解决方案是根据需要打开和关闭延迟扩展。
@echo off
setlocal DisableDelayedExpansion
set SEARCH=a
set REPLACE=x
set FILE=test.txt
for /f "delims=" %%A in (%FILE%) DO (
set line=%%A
setlocal enableDelayedExpansion
set line=!line:%SEARCH%=%REPLACE%!
echo !line!
endlocal
)