2013-09-23 80 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語句組合在一起,加倍每次外百分比。

但同樣,我不喜歡用這個方法,除非在極少數情況下。

相關問題