如何在 DOS/Windows 批处理文件中设置和使用数组值中的变量

如何在 DOS/Windows 批处理文件中设置和使用数组值中的变量

在 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

我真正想做的是反复调用一个程序并传递一堆参数,其中一个参数是数组变量。如果我将 call set 行中的 [%%i] 替换为 [0],则执行该行时的输出将如预期的那样为“call set y=one”。但如果我使用 [%%i] 访问数组元素,输出将更改为“call set y=”。我尝试了很多种方法组合来做到这一点,但没有一种能产生所需的结果 :(

答案1

如何设置/使用数组和循环索引中的变量?

您对代码的想法是正确的,但是您缺少了使其正常工作所需的一些细节。

下面将执行您想要的操作(test.cmd)

@echo off
setlocal enabledelayedexpansion
set x[0]=one
set x[1]=two
set x[2]=three
for %%i in (0,1,2) do (
    set y=!x[%%i]!
    echo y=!y!
)
endlocal

示例输出:

F:\test>test
y=one
y=two
y=three
F:\test>

笔记:

  • for应该是for /l,但它似乎/l是可选的,因为没有它也可以工作。
  • 您的for循环结束值应该2不是3
  • 您声明setlocal enabledelayedexpansion正确,但没有%!适当的地方替换。
  • call之前你不需要set
  • 您没有结束脚本,endlocal因此您的变量将“泄漏”到父 cmd shell 中。

进一步阅读

相关内容