bat 腳本中 for 迴圈內的字串替換

bat 腳本中 for 迴圈內的字串替換

該腳本中的替換進行得很順利。我正在努力使其充滿活力。

SETLOCAL enabledelayedexpansion
for /f "tokens=* delims= " %%a in (C:\workspace\iwms_kw_patch_script\BuildPatchScript\140903111828_batch_file.txt) do (
    set lineString=%%a

    set str2=!lineString:C:\iwms_builder_working_directory\tmp\IWMS_KW_01_CBI_2014-003\=!
    echo !str2!

    echo IF NOT %ERRORLEVEL%==0 GOTO ERROR_HANDLER2 >> %output_file%
)
endlocal

而且這個不起作用..

SETLOCAL enabledelayedexpansion
for /f "tokens=* delims= " %%a in (C:\workspace\iwms_kw_patch_script\BuildPatchScript\140903111828_batch_file.txt) do (
    set to_replace=C:\iwms_builder_working_directory\tmp\IWMS_KW_01_CBI_2014-003\
    set lineString=%%a
    set str2=!lineString:%to_replace%=!
    echo !str2!

    echo IF NOT %ERRORLEVEL%==0 GOTO ERROR_HANDLER2 >> %output_file%
)
endlocal

我可以在 for 迴圈中用變數替換字串嗎?謝謝:D

答案1

問題是變數的擴展。如果變數在for程式碼區塊內修改,且要在同一塊內存取其值,則需要延遲擴充。

但是您不能執行類似的操作!lineString:!to_replace!=!,因為解析器會將開頭解釋!to_replace終止 og lineString

所以,你有兩個選擇。

最簡單的方法需要在命令啟動之前知道要替換的值for。只需在命令to_replace之前定義即可for。當解析器到達for命令時,變數具有正確的值並且被正確擴展。

但是,如果出於任何原因您必須在命令中定義變數的值for,則需要將程式碼變更為

for /f "tokens=* delims= " %%a in ( .... ) do (
    set "lineString=%%a"

    set "to_replace= .... "
    for %%b in ("!to_replace!") do set "str2=!lineString:%%~b=!"

    echo !str2!
)

這會將變數中的值儲存到for替換表達式中使用的新的可替換參數中

相關內容