1

Running this script

@echo off

set "MemuConsole=C:\Program Files (x86)\Microvirt\MEmu\memuc.exe"
set Arr[0]=FIRST ELEM
set Arr[1]=SECOND ELEM
set "x=0"

:SymLoop
if defined Arr[%x%] (
    call set VAL=%%Arr[%x%]%%
    call echo %VAL%

    set /a "x+=1"
    goto :SymLoop
)

I can see expected output as:

FIRST ELEM
SECOND ELEM

Why different script:

@echo off

set "MemuConsole=C:\Program Files (x86)\Microvirt\MEmu\memuc.exe"
set Arr[0]=FIRST ELEM
set "x=0"

:SymLoop
if defined Arr[%x%] (
    call set VAL=%%Arr[%x%]%%
    call echo %VAL%

    set /a "x+=1"
    goto :SymLoop
)

Is giving me the same output? I removed set Arr[1]=SECOND ELEM but it is still printed.

dafie
  • 951
  • 7
  • 25
  • @GerhardBarnard I added `SETLOCAL EnableDelayedExpansion` after `@echo off` but it doesnt solved my problem – dafie Sep 23 '19 at 12:55
  • 2
    `setlocal enabledelayedexpansion` only *enables* delayed expansion. You also have to *use* it (with `!var!` instead of `%var%`, as shown by @Gerhard. – Stephan Sep 23 '19 at 13:54

1 Answers1

0

I suspect this is what you wanted:

@echo off
setlocal enabledelayedexpansion
set "MemuConsole=C:\Program Files (x86)\Microvirt\MEmu\memuc.exe"

set Arr[0]=FIRST ELEM
set Arr[1]=SECOND ELEM
set x=0

:SymLoop
if defined Arr[%x%] (
    call set VAL=%%Arr[!x!]%%
    call echo !VAL!

    set /a x+=1
    goto :SymLoop
)

You can remove Arr[1] from this example to test result.

Notice how Delayedexcpansion is used replacing % with !

Gerhard
  • 22,678
  • 7
  • 27
  • 43