Reputation: 2360
If I have a batch file and I am setting arrays with an index that is a variable
@echo off
SET x=1
SET myVar[%x%]=happy
How do I echo that to get "happy" ?
I've tried
ECHO %myVar[%x%]%
ECHO %%myVar[%x%]%%
ECHO myVar[%x%]
But none of them work.
It works fine if I use the actual number for the index
ECHO %myVar[1]%
But not if the index number is also a variable
Upvotes: 11
Views: 39973
Reputation: 421
one way you can do this is to use
call echo %%myVar[%x%]%%
call lets you put variables in places where they wouldn't normally work, if you use the double percents
Upvotes: 3
Reputation: 57252
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
I would recommend you to use
setlocal enableDelayedExpansion
echo !myvar[%x%]!
endlocal
as it is a best performing way
Upvotes: 12
Reputation: 114320
There is a special !
character in batch to deal with your situation. Use echo !myVar[%x%]!
, from How to return an element of an array in Batch?. !
means delayed expansion. The variable myVar
will not get expanded until after %x%
is, yielding the expression you want.
Upvotes: 6