2012-04-02 67 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