在 DOS/Windows 批处理文件中,如何设置/使用数组和循环索引中的变量,以便生成如下所示的输出?
SETLOCAL ENABLEDELAYEDEXPANSION
set x[0]=one
set x[1]=two
set x[2]=three
for %%i in (0,1,3) do (
call set y=%x[%%i]%
echo y=%y%
)
DESIRED OUTPUT:
y=one
y=two
y=three
我真正想做的是重复调用一个程序并传递一堆参数,其中一个是数组变量。如果我将行上的 [%%i] 替换为调用集,使用 [0],则执行该行时的输出是预期的“调用集 y=one”。但是,如果我使用 [%%i] 访问数组元素,则输出将更改为“call set y =”。我已经尝试了很多方法来做到这一点,但没有一个能产生预期的结果:(
如何设置/使用数组和循环索引中的变量?
您对代码有正确的想法,但是您缺少使其正常工作所需的一些细节。
以下将做你想要的(test.cmd)
示例输出:
笔记:
for
应该是for /l
,但它似乎/l
是可选的,因为它在没有它的情况下工作。for
循环结束值应该2
不是3
.setlocal enabledelayedexpansion
正确,但没有在适当的地方%
替换。!
call
你以前不需要set
。endlocal
因此您的变量将“泄漏”到父 cmd shell 中。延伸阅读