2013-09-23 71 views
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是代表09之间的数字并不总是同时为#'s相同。总之,我希望能够做到这一点(这是它的一个非常直接的版本)%X %Xcoord% Y %Ycoord% U%,减去空格。我知道我所说的是不可能的,因为它会读作%X% Xcoord %Y% Ycoord %U%,再次减去空格。请帮助我,因为我很困惑如何做到这一点。

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

+0

你能澄清你想达到什么?基本上你的代码可以检查所有可能的组合是否相等,但是你真的想要这样的代码吗? – Andrey

+1

看到这个[问题](http://stackoverflow.com/questions/9999327/),它可能会帮助你。 – Laf

+0

@Laf只是好奇,但你为什么从我的问题中删除我的“谢谢”? –

回答

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 
+0

只需检查,但是您的编辑是否会给出所需变量的值?例如:'set X1Y1U = 1 set/a TEMPLOC = X%Xcoord%Y%Ycoord%U'回显时'%TEMPLOC%= 1'?另外,如果我要使用第一个示例,我应该在哪里放置'setlocal EnableDelayedExpansion'?我应该把它放在批处理文件的前几行以及'@echo off'吗?谢谢 –

+0

@ Burn_E99 - 是的,这两种方法都是等价的,只要数值总是数字就会给出正确的答案。如果该值可能是非数值,那么您应该使用方法1.通常,'setlocal enableDelayedExpansion'出现在'@echo off'之后的顶部附近。但是,有些情况并非如此简单。但这本身就是一个整体话题。 – dbenham

+0

谢谢我认为我将使用你的set/a版本,因为它更直接,因为我对setlocal EnableDelayedExpansion并不了解(实际上没有)。 –

0

我强烈建议您使用由Aacini发布的任一方法。但另一个(慢得多)的方式来做到这一点没有延迟扩展是:

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

调用建立了两个正常扩张阶段。

如果XCOORD和YCOORD都为1,那么在第一膨胀阶段:

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

得到:

%X1Y1% 

然后,第二CALL膨胀阶段将得到所需的值。

你可以连续使用很多CALL语句组合在一起,加倍每次外百分比。

但同样,我不喜欢用这个方法,除非在极少数情况下。

相关问题