某個變數的值,可是卻沒有作用。
Example:
set var=0
for %%a in (1 1 1 1 1) do (
set /a var+=%%a
echo %var%
)
echo %var%
for %%a in (1 1 1 1 1) do (
set /a var+=%%a
echo %var%
)
echo %var%
Output:
0
0
0
0
0
5
0
0
0
0
5
上面範例原意是想讓var在每次的迴圈中都+1,最後的值會是5。可是在迴圈中每次echo 出
的值都是一開始的var值0。
原因是 var在 batch file被解析的時候就會提前展開,所以在迴圈中會 echo出一開始被展開的
值。要得到預想的結果就要使用setlocal EnableDelayedExpansion來延遲變數展開,使其在
執行的階段才會被展開。
Example:
setlocal EnableDelayedExpansion
set var=0
for %%a in (1 1 1 1 1) do (
set /a var+=%%a
echo !var!
)
echo %var%
set var=0
for %%a in (1 1 1 1 1) do (
set /a var+=%%a
echo !var!
)
echo %var%
Output:
1
2
3
4
5
5
2
3
4
5
5
注意在取值時,要延遲展開的變數需使用!var!才會有效果。
與setlocal EnableDelayedExpansion對應的是setlocal DisableDelayedExpansion,其作用為取消延遲變數展開。
沒有留言:
張貼留言