為什麼我的bat指令碼for迴圈語句裡面的值不會自增?
阿新 • • 發佈:2022-03-17
如果你曾經寫過這樣的程式碼
@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
這個時候就可以看到我們的變數終於正常了!