Vin*_*ala 0 scripting windows batch-file
预期输入:开始=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%
)
Run Code Online (Sandbox Code Playgroud)
实际输出:
401, 401 -1 + 100
401, 401 -1 + 100
401, 401 -1 + 100
401, 401 -1 + 100
401, 401 -1 + 100
不知道为什么 first 被分配了 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!
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4076 次 |
| 最近记录: |