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 次 |
最近记录: |