我想使用简单的Windows批处理文件进行文本搜索并在许多文件中替换。我的问题是:我不知道如何在从包含特殊变量/字符的目标文件中读取行时避免插入变量。
例如,对于包含这些行(包括!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批处理脚本?
答案 0 :(得分:0)
在阅读过程中不会出现此问题。当您尝试扩展%%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
)