2015-11-06 71 views
1

我有一个批处理文件FOR循环里面是这样的:批,总结变量在for循环

set /a target=5 

FOR /L %%G IN (1,1,%target%) DO (
    echo %%G) 

它的工作原理就像一个魅力%%摹会1,2,3,4,5。

现在我要像测试= %% G + 1新wariable,这将是: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

我该怎么办?

感谢 罗伯托

回答

2

您评估其设置FOR循环内部变量时需要使用EnabledDelayedExpansion

@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!的值。