使用索引变量的Echo批处理文件数组?

时间:2013-12-04 21:03:03

标签: arrays batch-file echo

如果我有一个批处理文件,并且我正在设置一个索引为变量的数组

@echo off
SET x=1
SET myVar[%x%]=happy

我如何回应这一点以获得“快乐”?

我试过

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

但它们都不起作用。

如果我使用索引的实际数字

,它可以正常工作
ECHO %myVar[1]%

但如果索引号也是变量

则不行

3 个答案:

答案 0 :(得分:7)

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 :(得分:5)

批处理中有一个特殊的!字符来处理您的情况。使用How to return an element of an array in Batch?中的echo !myVar[%x%]!!意味着延迟扩张。变量myVar%x%之后才会展开,从而产生您想要的表达式。

答案 2 :(得分:2)

你可以这样做的一种方法是使用

call echo %%myVar[%x%]%%
如果使用双倍百分比

调用允许您将变量放在通常不起作用的位置