为什么这批代码不起作用?

时间:2012-11-20 22:37:51

标签: batch-file

假设%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%变量每次都没有像它应该的那样计数。有人能解释一下原因吗?

1 个答案:

答案 0 :(得分: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%。