2014-11-24 176 views
1

在windows批处理中,您可以在变量中设置变量吗?变量中的Windows批处理变量

解释:

所以%num%在变量内。

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

是否有可能使百分比像括号一样工作? 输出应该是h1 =测试

任何帮助,将不胜感激。

+1

参见:http://stackoverflow.com/questions/10166386/arrays-linked-lists-and-other-data-structures-in-cmd-exe-batch-script/10167990#10167990 – Aacini 2014-11-25 04:29:00

回答

1

你是否在这样的事情?

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

有关延迟扩展的更多信息,请参阅http://ss64.com/nt/delayedexpansion.html

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

排序,这只是颠倒了。我试图避免脚本比我需要的多得多,并调用预定义的变量,这些变量根据特定条件而变化,例如: – Jonthemanman 2014-11-24 22:47:18

+0

set value =%start%number %%其中%number%可以更改。 – Jonthemanman 2014-11-24 22:48:40

+0

start1,start2,start3等已经定义好的变量,我只需要根据%number%变量加载某些变量。 – Jonthemanman 2014-11-24 22:49:16

2

你在你的问题的例子是一个烂摊子,但我想我明白你在找什么:

@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

非常感谢!这正是我需要的。 – Jonthemanman 2014-11-25 00:19:46

3

你可能会寻找呼叫设置命令。这将cnum设置为字符串c1,c2,c3等,每当%num%更改时它都会更改。然后可以使用Call Set将任何变量(例如h1)分配给变量cnum代表的值。

@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%