2012-11-20 66 views
1

假设%Edata%是这样写的"A;B;C;1;2;3;"可变那么这段代码应该可以把它分成一堆编号的变量:为什么这个批处理代码不工作?

set /a c=0 
FOR %%A IN (%Edata%) DO (
    set /a c=%c%+1 
    set var%c%=%%A 
    echo.^>^>^> Set "%%A" to "var%c%" 
) 

只有结果是变量的所有部分设置为var0因为%c%变量不会每次像它应该计算的那样。有人能解释为什么吗?

回答

2

此代码:

@echo off 
setlocal EnableDelayedExpansion 

set /a c=0 
FOR %%A IN (%Edata%) DO (
    set /a c=!c!+1 
    set var!c!=%%A 
    echo.^>^>^> Set "%%A" to "var!c!" 
) 

在你的脚本的问题是,默认情况下,变量在分析时,而不是在执行时扩大。在这种情况下,c在进入循环之前只扩展一次,这就是为什么它的值始终为0,并且它永远不会改变。

您必须启用的变数在执行时使用此命令的扩展:

setlocal EnableDelayedExpansion 

,你必须用c!而不是for循环中的%c%。

相关问题