批处理脚本echo动态变量

时间:2018-07-01 06:21:48

标签: batch-file

例如,我的批处理脚本中有一个动态变量,我需要使用它或稍后在脚本中打印它

set txt1=hello world
echo %txt1%
set /a num=1
echo %txt%%num%

在此示例的第二行中,结果将为“ hello world”,但在最后一行中将为1,如何使最后一行使用动态变量来打印“ hello world”

1 个答案:

答案 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 的详细信息。