Windows
批處理文件中的 For 循環
**預期輸入:**開始=1,結束=500,間隔=100
預期輸出:
1, 100
101, 200
201, 300
301, 400
401, 500
@echo off set start=1 set end=500 set interval=100 for /L %%g in (%start%, %interval%, %end%) do ( set first=%%g set /a last=%first% -1 + %interval% echo %first% , %last% )
實際輸出:
401 , 401 -1 + 100
401 , 401 -1 + 100
401 , 401 -1 + 100
401 , 401 -1 + 100
401 , 401 -1 + 100
不知道為什麼首先分配了 401 值,感謝任何幫助
這是一個典型的延遲擴展問題。鍵入
help set
或set /?
從命令提示符討論有關延遲擴展的討論(在完整幫助的一半之後)。
%var%
解析行時發生正常擴展 using 。問題是你的整個 FOR 循環塊被一次性解析。因此,您會看到循環開始之前存在的常量值。401 的值可能是前一次執行遺留下來的。解決方案是延遲擴展。首先,您必須使用
setlocal enableDelayedExpansion
. 然後你使用!var!
而不是%var%
. 這將在執行時而不是在解析時給出值。此外,使用
set /a
.@echo off setlocal enableDelayedExpansion set start=1 set end=500 set interval=100 for /L %%g in (%start%, %interval%, %end%) do ( set /a first=%%g, last=first-1+interval echo !first!, !last! )