【问题标题】:Perform arithmetic in loop with variables in Batch使用批处理中的变量在循环中执行算术
【发布时间】:2017-04-27 17:13:29
【问题描述】:

我想打印以下内容:

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

如何在我的代码中同时使用AB 来实现所需的输出?

【问题讨论】:

  • 这是一个延迟扩展问题。懒得去谷歌了,但是在 SO 上已经有数百个这样的问题了。为什么不只是for /L %%A in (0,1,4)?如果这不切实际,那么您应该setlocal enabledelayedexpansionecho !B!。如需更多信息,请在 cmd 控制台中执行 help set,注意以“终于添加了对延迟环境变量扩展的支持”开头的部分。
  • 该代码没有输出 4 五次。它将输出ECHO IS OFF 五次。
  • @Squashman 第一次运行时它输出ECHO IS OFF 5 次,但下次运行时输出4 5 次。
  • 那是因为您在没有关闭 cmd 提示符的情况下再次运行了它(在相关说明中,您可以从命令提示符处运行脚本而不是双击它)。

标签: batch-file variables for-loop echo arithmetic-expressions


【解决方案1】:
ECHO OFF
setlocal
FOR /L %%A in (1,1,5) DO (
    SET /a "B=%%A-1"
    call ECHO %%B%%
)

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

这里是“官方”方式:

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

delayedexpansion 模式下,!var! 检索var 的值,因为它在运行时发生变化。这并非没有缺点,但您需要阅读 delayedexpansion 以获取有关该问题的指南。

【讨论】:

    猜你喜欢
    • 2016-01-14
    • 1970-01-01
    • 2021-03-16
    • 2016-04-14
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    相关资源
    最近更新 更多