代码之家  ›  专栏  ›  技术社区  ›  IslandPatrol

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

  •  2
  • IslandPatrol  · 技术社区  · 9 年前

    0
    1
    2
    3
    4
    

    我试过这个:

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

    然而,这给了我:

    4
    4
    4
    4
    4
    

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

    1 回复  |  直到 9 年前
        1
  •  5
  •   Magoo    9 年前
    ECHO OFF
    setlocal
    FOR /L %%A in (1,1,5) DO (
        SET /a "B=%%A-1"
        call ECHO %%B%%
    )
    

    因为你没有使用 setlocal , B 将设置为上次运行的值。 %B% 将替换为 4 自从 B 被设置为 4. 通过上一次运行。这个 call echo 这个技巧使用解析技巧来检索变量的当前(运行时)值。

    以下是“官方”方式:

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

    在里面 delayedexpansion !var! 检索 var 因为它在运行时改变。这并非没有缺点,但您需要仔细阅读 延迟扩张 关于这个问题的指南。