1
在if块内做出的赋值(即集合语句)直到if块之后才实现。换句话说,你不能依赖if块中的变量赋值。如何解决这个问题?如何在if块中实现赋值?
在if块内做出的赋值(即集合语句)直到if块之后才实现。换句话说,你不能依赖if块中的变量赋值。如何解决这个问题?如何在if块中实现赋值?
立即实现IF或FOR块中的赋值。不恰当实现的是以百分号包围的变量值的取值。您必须注意,在执行行之前,%变量%的值被替换为。例如:
set var=Old value
set var=New value & echo %var%
上一个命令显示:“旧值”。解决这个问题的方法是通过Delayed Expansion,也就是将变量放在感叹号中,而不是百分数,并在开始处添加一个setlocal ...命令。那就是:
setlocal EnableDelayedExpansion
set var=Old value
set var=New value & echo !var!
这样,!var!值被替换,直到echo!var!执行命令(延迟扩展),并在前一个集合命令执行后,所以以前的命令显示:“新值”。
这个同样的讨论适用于括号内的任何变量。例如:
set var=Old value
if 1 == 1 (
set var=New value
echo %var%
)
...因为%VAR%值执行整个IF(或者)之前只有一次扩大是错误的。您必须使用:
setlocal EnableDelayedExpansion
set var=Old value
if 1 == 1 (
set var=New value
echo !var!
)
类型SET /?了解更多详情。
为什么需要setlocal EnableDelayedExpansion?是否在注册表中默认启用DelayedExpansion? – user93200 2012-04-02 03:20:08
默认情况下它未启用,但您可以在注册表中启用它。输入'CMD /?'获得关于这个主题的更多细节。 – Aacini 2012-04-02 03:34:57