2013-06-23 73 views
0

我努力学习MS批,我是特别想了解“SETLOCAL”和“enabledelayedexpression”方面,当我遇到的词汇来我不解地问:解析时间与执行时间

执行时间分析时

回答

4

解析器不同阶段,解析一行时。
因此,在执行行(或块中的任何行)之前,行或块被解析时,百分比表达式都会展开。

所以在执行时他们不能再改变了。

set var=origin 
echo #1 %var% 
(
    set var=new value 
    echo #2 %var% 
) 
echo #3 %var% 

它输出

#1 origin 
#2 origin 
#3 new value 

如在分析时#2将执行该块的任何行之前被扩展到origin。 因此,您可以在#3块后面看到新值。

相比之下,延迟扩展在每行执行之前就扩大了。

setlocal EnableDelayedExpansion 
set var=origin 
echo #1 %var%, !var! 
(
    set var=new value 
    echo #2 %var%, !var! 
) 
echo #3 %var%, !var! 

输出

#1 origin, origin 
#2 origin, new value 
#3 new value, new value 

现在在#2你看到两个不同的膨胀为相同的变量,因为当块被解析%VAR%扩大,但经过线路set var=new value!var!扩大执行。

有关批解析器的更多详细信息,请参阅SO: How does the Windows Command Interpreter (CMD.EXE) parse scripts?