0

我正在尝试在 for 循环中使用索引并将其存储在变量中。我用这段代码写了一个批处理文件:

FOR /L %%x IN (1,1,3) DO (
    ECHO %%x
    SET tmp=prefix_%%x.suffix
    ECHO tmp is %tmp%
)

运行它时,我得到:

1
tmp is prefix_3.suffix
2
tmp is prefix_3.suffix
3
tmp is prefix_3.suffix

我希望它是:

1
tmp is prefix_1.suffix
2
tmp is prefix_2.suffix
3
tmp is prefix_3.suffix

我究竟做错了什么?!

4

1 回答 1

4
Setlocal enableextensions enabledelayedexpansion

FOR /L %%x IN (1,1,3) DO (
    ECHO %%x
    SET tmp=prefix_%%x.suffix
    ECHO tmp is !tmp!
)

for 命令中的所有块在读取时都会被评估。%%x 更改被视为是已知在循环期间会更改的特殊变量,但 %tmp% 仅在开始时翻译一次,并且不会重新计算。启用延迟扩展并将 sintax 更改为!tmp!指示 cmd 在每次访问时重新评估变量。

于 2013-11-14T13:02:30.630 回答