1

我想使用一个简单的 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 Batch 脚本?

4

1 回答 1

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
)
于 2013-09-10T02:33:12.473 回答