1. 程式人生 > 其它 >為什麼我的bat指令碼for迴圈語句裡面的值不會自增?

為什麼我的bat指令碼for迴圈語句裡面的值不會自增?

如果你曾經寫過這樣的程式碼

@echo off
set /a sum=0
for /r %%i in (*) do (
    set /a sum=sum+1
    echo %sum%
)
pause

那麼你就會發現,你輸出的結果會是清一色的0

這究竟是怎麼回事?難道說是我程式碼敲錯了?其實你沒敲錯,這個是批命令本來就是這樣,我們的window把整個for迴圈其實看成了一個語句,既然是一個語句,那麼語句內的變數自然就不會記錄

同時如果你要是在這個for迴圈的外面再輸出一次sum你就會發現他的值變成了正常的值

但是這給我們的程式設計帶來了很多麻煩,我們要怎麼解決呢?

使用setlocal enabledelayedexpansion

setlocal enabledelayedexpansion加在我們for迴圈的前面就可以解決
set local enbale delayed expansion 如果英語還過得去的朋友稍微記一下就能記得住


注意,在這個延時解釋變數開啟的時候,for迴圈內部的變數不再使用%sum%
而是使用!sum!的形式,如果依舊使用%sum%就會出現意料之外的錯誤

@echo off
set /a sum=0
setlocal enabledelayedexpansion
for /r %%i in (*) do (
    set /a sum=sum+1
    echo !sum!
)

pause

這個時候就可以看到我們的變數終於正常了!