假设这%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%
变量不会像预期的那样每次都计数。有人可以解释为什么吗?
假设这%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%
变量不会像预期的那样每次都计数。有人可以解释为什么吗?
此代码有效:
@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% 。