为什么循环中没有更新环境变量?

时间:2017-10-07 16:31:50

标签: batch-file

我希望我的变量res在循环内更新,但直到第二次迭代后它才会更新。

这是我的代码:

@echo off
set /a res=10

:loop
if %res% gtr 100 (
    goto endLoop
) else (
    set /a res=res*10
    rem Here the 'res' shouldn't it be 100?
    echo the result is : %res%
    rem Here the first iteration display 10 not 100.
    goto loop
)

:endLoop
pause > nul

对此有解释吗?

1 个答案:

答案 0 :(得分:1)

作为延迟扩展的使用示例,请修改以下代码:

@Echo Off
SetLocal EnableDelayedExpansion

Set "res=10"

:loop
If %res% Lss 100 (
    Set/A res*=10
    Echo the result is : !res!
    GoTo loop
)

Pause>Nul

在这种情况下,有一种不使用延迟扩展的替代方案,但是我建议你坚持使用前者,直到你有足够的信心去理解读取和解析事物的顺序:

@Echo Off

Set "res=10"

:loop
If %res% Lss 100 (
    Set/A res*=10
    Call Echo the result is : %%res%%
    GoTo loop
)

Pause>Nul