此脚本中的替换很顺利。我正在尝试使其动态化。
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
替换表达式中使用的新的可替换参数中