例如,我的批处理脚本中有一个动态变量,我需要使用它或稍后在脚本中打印它
set txt1=hello world
echo %txt1%
set /a num=1
echo %txt%%num%
在此示例的第二行中,结果将为“ hello world”,但在最后一行中将为1,如何使最后一行使用动态变量来打印“ hello world”
答案 0 :(得分:0)
请勿使用算术表达式将数字字符串分配给环境变量。在大多数情况下,尽管始终有效,但这是没有用的。因此,请使用set "num=1"
而不是set /a num=1
。由于这个原因,请阅读Why is no string output with 'echo %var%' after using 'set var = text' on command line?
有必要通过cmd.exe
将最后一个命令行解析两次,这可以通过使用延迟扩展或使用命令 CALL 来访问,如对{{3 }}
使用命令 CALL 的解决方案:
set "txt1=hello world"
echo %txt1%
set "num=1"
call echo %%txt%num%%%
由于命令 CALL 到call echo %txt1%
,最后一行由echo hello world
执行,最后一行首先处理到cmd.exe
,然后第二次处理。 / p>
使用How does the Windows Command Interpreter (CMD.EXE) parse scripts?的第二个解决方案:
setlocal EnableDelayedExpansion
set "txt1=hello world"
echo %txt1%
set "num=1"
echo !txt%num%!
endlocal
由于在执行批处理文件时延迟将环境变量扩展到echo !txt1!
,因此最后一行仅被处理到echo hello world
,第二次处理。
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的所有帮助页面。
call /?
echo /?
endlocal /?
set /?
setlocal /?
阅读delayed expansion,以获取有关命令 SETLOCAL 和 ENDLOCAL 的详细信息。