我有一个带有FOR循环的批处理文件,如下所示:
set /a target=5
FOR /L %%G IN (1,1,%target%) DO (
echo %%G)
它就像一个魅力%% G将1,2,3,4,5。
现在我想要一个像test = %% G + 1这样的新版本,它将是:2,3,4,5,6
但是使用这段代码它不起作用。
set /a target=5
FOR /L %%G IN (1,1,%target%) DO (
echo %%G
set /a test=%%G+1
echo %test%
)
测试变量每次都是:6
我该怎么办?
由于 罗伯特
答案 0 :(得分:2)
在评估EnabledDelayedExpansion
循环中设置的变量时,您需要使用FOR
:
@ECHO OFF
SETLOCAL EnableDelayedExpansion
set /a target=5
FOR /L %%G IN (1,1,%target%) DO (
echo %%G
set /a test=%%G+1
REM Note the exclamation marks.
REM This is delayed expansion notation.
echo !test!
)
ENDLOCAL
如果您不使用延迟扩展,那么所有变量都会在FOR
循环的第一次传递时进行评估,因此%test%
此时实际上不会有值。
通过启用延迟展开(并使用!test!
表示法),脚本将在每次传递时评估!test!
的值。