在'for'循环中使用变量

Jac*_*cob 3 for-loop batch-file

我有以下代码:

@echo off
SET ITER=0
for %%i in (%*) do (
  SET ITER+=1
  ECHO %ITER%
)
Run Code Online (Sandbox Code Playgroud)

输出是(对于三个参数):

0
0
0
Run Code Online (Sandbox Code Playgroud)

预期产量:

1
2
3
Run Code Online (Sandbox Code Playgroud)

为什么我不能在for循环中访问更新的变量?

jeb*_*jeb 5

使用百分比扩展变量是在执行语句/块之前完成的.
所以在你的情况下,完成块在echo %ITER%执行之前被扩展为常量echo 0.
变量ITER本身在循环中正确更新.

为避免这种情况,您可以使用延迟扩展,这类似于扩展百分比,但仅在执行时

@echo off
setlocal EnableDelayedExpansion
SET ITER=0
for %%i in (%*) do (
  SET /a ITER+=1
  ECHO !ITER!
)
Run Code Online (Sandbox Code Playgroud)