Windows Batch Variable within variable

后端 未结 3 1598
夕颜
夕颜 2020-12-11 08:01

In windows batch could you set a variable within a variable?

Explained:

So the %num% is within the variable.

set num=5
set cnum=test
set h1=%         


        
相关标签:
3条回答
  • 2020-12-11 08:30

    Your example in your question is a mess, but I think I understand what you are looking for:

    @echo off
    setlocal
    
    set C1=apple
    set C2=orange
    set C3=banana
    
    set num=2
    
    
    :: Inefficient way without delayed expansion
    :: This will be noticeably slow if used in a tight loop with many iterations
    call echo %%C%num%%%
    
    :: The remaining methods require delayed expansion
    setlocal enableDelayedExpansion
    
    :: Efficient way 1
    echo(
    echo !C%num%!
    
    :: Efficient way 2 - useful if inside parenthesized block
    :: where %num% will not give current value
    echo(
    for %%N in (!num!) do echo !C%%N!
    
    :: Showing all values via a loop
    echo(
    for /l %%N in (1 1 3) do echo !C%%N!
    
    0 讨论(0)
  • 2020-12-11 08:45

    You may be looking for the Call Set command. This sets cnum to string c1, c2, c3 etc. It changes each time %num% changes. You can then use Call Set to assign any variable (h1 for example) to the value of the variable cnum stands for.

    @echo off
    setlocal enabledelayedexpansion
        set c5=test
        set num=5
    
        :: set cnum to string "c5"
            set cnum=c%num%
        :: set h1 to to the existing variable c5 
            call set "h1=%%%cnum%%%"
            echo %h1%
    
    0 讨论(0)
  • 2020-12-11 08:47

    Are you after something like this?

    cls
    @echo off
    setlocal EnableDelayedExpansion
    Set num=5
    Set "c!num!=test"
    Echo !c5!
    

    See http://ss64.com/nt/delayedexpansion.html for more info on delayed expansion.

    cls
    @echo off
    setlocal EnableDelayedExpansion
    set num=4
    set c1=this is a demo
    set c2=second example
    set c3=third
    set c4=this is the one I want
    set c5=last
    Echo !c%num%!
    
    0 讨论(0)
提交回复
热议问题