該腳本中的替換進行得很順利。我正在努力使其充滿活力。
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
替換表達式中使用的新的可替換參數中