簡體   English   中英

通過Windows批處理文件讀取行時避免插值

[英]Avoid interpolations when reading lines via Windows batch file

我想使用一個簡單的Windows Batch文件進行文本搜索並在許多文件中替換。 我的問題是:從目標文件讀取可能包含特殊變量/字符的行時,我不知道如何避免對變量進行插值。

例如,對於目標文件test.txt,其中包含以下幾行(包括!time!^^! ):

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腳本嗎?

在讀取過程中不會發生此問題。 當您嘗試擴展%%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
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM