使用变量作为索引来回显批处理文件中的数组?

11
如果我有一个批处理文件,并且我正在使用变量作为索引设置数组。
@echo off
SET x=1
SET myVar[%x%]=happy

我该如何输出得到"happy"?

我已经尝试过

ECHO %myVar[%x%]%
ECHO %%myVar[%x%]%%
ECHO myVar[%x%]

但是它们都不起作用。

如果我使用实际的索引数字,它可以正常工作。

ECHO %myVar[1]%

但是如果索引号也是一个变量,则不适用此方法


3个回答

12
SET x=1
SET myVar[%x%]=happy

call echo %%myvar[%x%]%%
set myvar[%x%]
for /f "tokens=2* delims==" %%v in ('set myvar[%x%]')  do @echo %%v
setlocal enableDelayedExpansion
echo !myvar[%x%]!
endlocal

我建议你使用

setlocal enableDelayedExpansion
echo !myvar[%x%]!
endlocal

因为它是最佳表现方式,所以我们保留原样。


1
当然可以...而且我甚至在我的代码的另一个部分做了这件事,但是没有将两个部分联系起来。谢谢! - Dss

6

在批处理中有一个特殊的!字符可以处理你的情况。使用echo !myVar[%x%]!,来自如何在批处理中返回数组元素?。其中!表示延迟扩展。变量myVar直到%x%被扩展后才会被扩展,从而得到您想要的表达式。


3
一种实现这一目标的方法是使用:
call echo %%myVar[%x%]%%

使用call命令时,如果你使用双百分号,可以在本应无法使用的位置放置变量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接