变量名是否可能包含其他变量?

时间:2013-09-23 20:32:57

标签: variables batch-file

我有一个我正在处理的批处理文件,我需要变量名称可以更改。我的意思是我有一个名为%X0Y0U%%X9Y9U%的变量列表,所有变量都设置为1或0,其中一个变量设置为2(如果需要,可以更改) 。我有一个批处理文件的后续部分执行此操作:

set TEMPLOC=X%Xcoord%Y%Ycoord%U
if %TEMPLOC% EQU 1 (
     random code
) ELSE if %TEMPLOC% EQU 0 (
     random code
) ELSE if %TEMPLOC% EQU 2 (
     random code
)

然后批处理文件有一个我知道已经工作的部分。我需要知道的是我如何使%TEMPLOC%等于变量%X#Y#U%的值。 #'s代表09之间的数字,并且#'s的数字并不总是相同。简而言之,我想能够做到这一点(这是它的一个非常文字的版本)%X %Xcoord% Y %Ycoord% U%,减去空格。我知道我所说的是不可能的,因为它将读作%X% Xcoord %Y% Ycoord %U%,再次减去空格。请帮助我,因为我对如何做到这一点感到非常困惑。

如果您不理解或不需要我添加更多代码,在评论中说明。

2 个答案:

答案 0 :(得分:1)

您可以使用延迟扩展;这样,该行分两个阶段进行解析和扩展:第一个扩展适用于以百分号括起来的变量,第二个扩展适用于包含在感叹号中的变量(只要启用延迟扩展)。例如:

setlocal EnableDelayedExpansion
set Xcoord=3
set Ycoord=6
set TEMPLOC=!X%Xcoord%Y%Ycoord%U!

编辑添加第二个方法

如果X%Xcoord%Y%Ycoord%U变量的值是一个数字,您也可以通过SET /A命令执行相同的操作而不进行延迟扩展:

set /A TEMPLOC=X%Xcoord%Y%Ycoord%U

答案 1 :(得分:0)

我强烈建议您使用Aacini发布的任何一种方法。但是,没有延迟扩展的另一种(慢得多)方式是:

call set TEMPLOC=%%X%Xcoord%Y%Ycoord%%%

CALL创建了两个正常的扩展阶段。

如果Xcoord和Ycoord都是1,那么在第一个扩展阶段:

%Xcoord%  --> 1
%Ycoord%  --> 1
%%        --> %

得到以下特性:

%X1Y1%

然后第二个CALL扩展阶段将获得您想要的值。

您可以将多个CALL语句链接在一起,每次将外部百分比加倍。

但是,除了极少数情况外,我不喜欢使用这种方法。