我有一个我正在处理的批处理文件,我需要变量名称可以更改。我的意思是我有一个名为%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
代表0
和9
之间的数字,并且#'s
的数字并不总是相同。简而言之,我想能够做到这一点(这是它的一个非常文字的版本)%X %Xcoord% Y %Ycoord% U%
,减去空格。我知道我所说的是不可能的,因为它将读作%X% Xcoord %Y% Ycoord %U%
,再次减去空格。请帮助我,因为我对如何做到这一点感到非常困惑。
如果您不理解或不需要我添加更多代码,请在评论中说明。
答案 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语句链接在一起,每次将外部百分比加倍。
但是,除了极少数情况外,我不喜欢使用这种方法。