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

4

1 回答 1

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% 。

于 2012-11-20T22:54:39.757 回答