非结果算术表达式

时间:2014-07-07 11:03:39

标签: batch-file windows-7-x64

我在批处理程序中练习,所以我正在尝试编写一个包含循环和算术指令。我写了以下代码:

@echo off
SET /a i=1
FOR /F %%A IN ('DIR /B') DO (
    SET /a i += %i% + %i% + 4
    ECHO %i%)

但每行的答案都是1! 我尝试用SET /a "i += %i% + %i% + 4"编写此代码,但答案是一样的。 我查了herehere 但我发现没有任何与此错误有关的信息 即使我删除了上述行中包围的空格,但答案是一样的。

1 个答案:

答案 0 :(得分:1)

set /a i=1不同set /a i = 1。在第二种情况下,您可以定义名称中带有空格的变量。

如果您不使用/a算术开关,set i= 1,则=之后的空格将包含在变量的值中。

但是通过这些更正,您的问题就是其他问题

@echo off
    setlocal enabledelayedexpansion

    SET /a "i=1"
    FOR /F %%A IN ('DIR /B') DO (
        SET /a "i+=i+i+4"
        ECHO !i!
    )

    endlocal

当解析代码块(括号内的代码)时,所有变量读取都将替换为变量中的值开始执行块之前。因此,如果在代码块中使用%i%,因为在开始执行之前,此变量读取已替换为变量的值,您将看不到更改的值回显到控制台,但是初始{{ 1}}价值。变量正在更改其值(执行1),但由于set命令不访问变量,而是在循环开始之前使用其值,因此所有迭代都会回显相同的值

如果在代码块中更改了变量并且需要在同一代码块中访问更改的值,则需要启用延迟扩展,并且在echo%i%的所需变量访问中更改语法!i!表示解析器在执行命令之前应该延迟对变量值的访问。