2013-02-06 17 views
0

在if塊內設置環境變量BOOBOO的值似乎沒有設置它。但是,它在if塊結束後設置。爲什麼它在if區塊內沒有值?IF塊內的設置和環境變量

運行在Microsoft Windows XP [版本5.1.2600] SP3

echo BOOBOO is +++%BOOBOO%+++ 
echo step 1 
setlocal enableextensions 
IF "%BOOBOO%" == "" (
    echo step 2 
    SET BOOBOO=xyz 
    echo step 3 
    echo BOOBOO has been set to %BOOBOO% 
    echo BOOBOO part is %BOOBOO:~0,2% 
    echo step 4 
) 
echo step 8 
echo BOOBOO ends up as %BOOBOO% 
echo step 9 
EXIT /B 0 

===

M:> t 
BOOBOO is ++++++ 
step 1 
step 2 
step 3 
BOOBOO has been set to 
BOOBOO part is ~0,2 
step 4 
step 8 
BOOBOO ends up as xyz 
step 9 

回答

1

的值設置IF塊內,但使用正常的,你看不到的變化因爲在解析時擴展該值,並且在執行IF命令之前立即分析整個塊。所以你得到了在你輸入IF塊之前存在的值。

您已啓用延遲擴展。你只需要使用它。

echo BOOBOO has been set to !BOOBOO! 
echo BOOBOO part is !BOOBOO:~0,2! 
+0

我以爲延遲擴展只用於FOR循環。非常感謝您的快速,正確的答案。 – lit