2012-04-02 68 views

回答

2

立即实现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 /?了解更多详情。

+1

为什么需要setlocal EnableDelayedExpansion?是否在注册表中默认启用DelayedExpansion? – user93200 2012-04-02 03:20:08

+0

默认情况下它未启用,但您可以在注册表中启用它。输入'CMD /?'获得关于这个主题的更多细节。 – Aacini 2012-04-02 03:34:57