1
在if塊內做出的賦值(即集合語句)直到if塊之後才實現。換句話說,你不能依賴if塊中的變量賦值。如何解決這個問題?如何在if塊中實現賦值?
在if塊內做出的賦值(即集合語句)直到if塊之後才實現。換句話說,你不能依賴if塊中的變量賦值。如何解決這個問題?如何在if塊中實現賦值?
立即實現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 /?瞭解更多詳情。
爲什麼需要setlocal EnableDelayedExpansion?是否在註冊表中默認啓用DelayedExpansion? – user93200 2012-04-02 03:20:08
默認情況下它未啓用,但您可以在註冊表中啓用它。輸入'CMD /?'獲得關於這個主題的更多細節。 – Aacini 2012-04-02 03:34:57