使用批处理中的变量在循环中执行算术运算

Isl*_*rol 3 variables for-loop arithmetic-expressions batch-file echo

我想打印以下内容:

0
1
2
3
4
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这个:

ECHO OFF
FOR /L %%A in (1,1,5) DO (
    SET /a "B=%%A-1"
    ECHO %B%
)
Run Code Online (Sandbox Code Playgroud)

然而,这给了我:

4
4
4
4
4
Run Code Online (Sandbox Code Playgroud)

A在我的代码中同时使用和时,如何实现所需的输出B

Mag*_*goo 8

ECHO OFF
setlocal
FOR /L %%A in (1,1,5) DO (
    SET /a "B=%%A-1"
    call ECHO %%B%%
)
Run Code Online (Sandbox Code Playgroud)

由于您没有使用setlocal,B将被设置为上次运行的值。%B%将被替换为4since被上次运行B设置为。4call echo技巧使用解析怪癖来检索变量的当前(运行时)值。

这是“官方”方式:

ECHO OFF
setlocal enabledelayedexpansion
FOR /L %%A in (1,1,5) DO (
    SET /a "B=%%A-1"
    ECHO !B!
)
Run Code Online (Sandbox Code Playgroud)

delayedexpansion模式下,检索运行时更改!var!的值。var这并非没有缺点,但您需要阅读delayedexpansion有关该问题的指南。