if块之前的分配(即set语句)直到if块之后才会实现。因此,换句话说,您不能依赖于if块中的变量赋值。如何解决这个问题?
答案 0 :(得分:2)
立即实现IF或FOR块中的分配。没有正确实现的是用百分号括起的变量值的替换。您必须注意,在执行行之前,替换了%variable%值。例如:
set var=Old value
set var=New value & echo %var%
以前的命令显示:“旧值”。解决此问题的方法是通过延迟扩展,即将变量括在感叹号中而不是百分比,并在开头添加 setlocal ... 命令。那就是:
setlocal EnableDelayedExpansion
set var=Old value
set var=New value & echo !var!
这样,!var!更改值直到 echo!var!命令执行(延迟扩展)并执行上一个 set 命令后,以前的命令显示:“新值”。
同样的讨论适用于括号内的任何变量 。例如:
set var=Old value
if 1 == 1 (
set var=New value
echo %var%
)
...是错误的,因为%var%值在执行整个IF(或FOR)之前只展开一次。你必须使用:
setlocal EnableDelayedExpansion
set var=Old value
if 1 == 1 (
set var=New value
echo !var!
)
输入 SET /?了解更多详情。