Search code examples
batch-filevariables

How to reference the value of an environment variable with using another environment variable value in variable name?


I know that similar questions have been asked before and I have seen them but neither does !var[%Z%]! nor %var[!Z!]% work here:

@echo off
set Z=0
setlocal enabledelayedexpansion
set count=0
for /f "tokens=*" %%x in (Data) do (
    set /a count+=1
    set var[!count!]=%%x
)
:end
cls 
echo %var[!Z!]%
choice  /N /C QE
IF %errorlevel% == 1 GOTO ZP
IF %errorlevel% == 2 GOTO ZM
pause >nul
goto :end

:ZP
set /a Z=%Z%+1
goto :end
:ZM
set /a Z=%Z%-1
goto :end

I tried them and they don't work. What can I do?

Data is a file with following lines:

A
B
C
D
E
F
AA
AB
AC
AD

Solution

  • I'm assuming that this was your intention, (small modifications included). i.e. to be able to two way cycle through the data items using the Q and E keys.

    Code as per the suggestion in my comment:

    @Echo Off
    SetLocal EnableExtensions DisableDelayedExpansion
    Set /A "Z=count=0"
    
    Setlocal EnableDelayedExpansion
    For /F "Tokens=* UseBackQ" %%G In ("Data.ext") Do (
        Set /A count += 1
        Set "var[!count!]=%%G"
    )
    Set "count="
    
    :End
    ClS 
    Echo(!var[%Z%]!
    %SystemRoot%\System32\choice.exe /C QE /N
    If ErrorLevel 2 GoTo ZM
    GoTo ZP
    Pause 1>NUL
    GoTo End
    
    :ZP
    Set /A Z += 1
    GoTo End
    
    :ZM
    Set /A Z -= 1
    GoTo End