Windows

批處理文件中的 For 循環

  • November 27, 2014

**預期輸入:**開始=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 setset /?從命令提示符討論有關延遲擴展的討論(在完整幫助的一半之後)。

%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!
)

引用自:https://serverfault.com/questions/647451