0

我有一个正在处理的批处理文件,我需要一个可以更改的变量名。我的意思是我有一个变量列表,所有变量都设置%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%,再次减去空格。请帮助我,因为我对如何做到这一点感到非常困惑。

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

4

2 回答 2

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
于 2013-09-23T20:50:15.893 回答
0

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

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

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

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

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

产生:

%X1Y1%

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

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

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

于 2013-09-23T22:14:46.360 回答