2013-06-23 66 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?