![在批处理脚本中不立即处理字符串中的变量](https://linux22.com/image/1416334/%E5%9C%A8%E6%89%B9%E5%A4%84%E7%90%86%E8%84%9A%E6%9C%AC%E4%B8%AD%E4%B8%8D%E7%AB%8B%E5%8D%B3%E5%A4%84%E7%90%86%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E7%9A%84%E5%8F%98%E9%87%8F.png)
我想知道是否可以不立即处理包含变量的变量,而仅在被询问时才处理。例如这个批次:
@echo off
setlocal EnableDelayedExpansion
set VA=Two
set VAR=!VA! people
set VA=Three
ECHO !VAR!
打印“两个人”。是否可以只在最后使用 echo 进行解析,以输出“三个人”?
答案1
这是不可能的。一旦变量被赋值,它就不再依赖于赋值时使用的变量或文本。
实现所需输出的最简单方法是简单地回显 VA 变量和末尾的文本。基本上,进行所有计算,然后在最后汇总输出。
@echo off
setlocal EnableDelayedExpansion
set VA=Two
set VA=Three
ECHO !VA! people
pause
答案2
只需在最后再次设置 VAR 即可。设置变量的次数没有限制。
请记住,批处理文件只是您可以在命令提示符中输入的命令列表。每一行基本上都是按时间顺序一次执行的一条命令。
因此,如果您需要在适当的条件下提高 VAR,请在该时刻之前进行设置。示例:
@echo off
setlocal EnableDelayedExpansion
set VA=Two
set VAR=%VA% people
echo %VAR%
set VA=Three
::We want to update VAR, so lets set it again:
set VAR=%VA% people
echo %VAR%
pause
批处理文件中的 :: 与 REM 相同