cmd var in var name (20點!)

有個batch program (cmd) o既問題 :

> set area1=100

> choice /c 12 /n

> if "%area%ERRORLEVEL%%"=="1" (

> echo Running

> )

但是%area%ERRORLEVEL%%應不能運行。

如果要在if %variable name%内使用variable,應如何做?

1 個解答

評分
  • 7 年前
    最愛解答

    %area%ERRORLEVEL%%不可能運行的

    只用一個符號不可能在一個變數中插入另一個變數

    因為表示變數開頭的%和表示變數終結的%是同一個字

    你不可能知道第二個%是另一個變數的開頭還是原本變數的終結

    這是一個歧義,因此電腦無法解讀

    正如我說我買蘋果,你不可能知道我要買水果還是買蘋果公司的產品

    要在if %variable name%内使用variable,方法有二

    一、改用其他語言

    二、用取巧的方法

    set area1=100

    set area2=200

    choice /c 12 /n

    echo set areatmp=%%area%ERRORLEVEL%%%>tmp.bat

    call tmp.bat

    if %areatmp%==1 (

    echo running

    )

    如果你有一個變數叫%areatmp%能儲存%area%ERRORLEVEL%%的資料

    假設%ERRORLEVEL%=1

    你就可以直接使用%areatmp%來偵察%area1%的數值

    但%areatmp%不能被直接取得,要另外創建一個Batch檔:

    echo set areatmp=%%area%ERRORLEVEL%%%>tmp.bat

    被創建的Batch檔叫tmp.bat,內容是:

    set areatmp=%area1%

    兩個連在一起的%不可能是變數,被MS定義為顯示%

    例如echo %% 會顯示 %

    所以 echo %%area%ERRORLEVEL%%% 會顯示

    %area1%

    而echo set areatmp=%%area%ERRORLEVEL%%% 會顯示

    set areatmp=%area1%

    最後的 >tmp.bat 是指把前面的顯示存進tmp.bat,如

    echo hi>a.bat 的話 a.bat 的內容會是 hi

    然後我們會執行tmp.bat:

    call tmp.bat

    假設%ERRORLEVEL%=1,tmp.bat的內容是

    set areatmp=%area1%

    假設%ERRORLEVEL%=2,tmp.bat的內容是

    set areatmp=%area2%

    執行完我們多了一個%areatmp%,而Batch中用call指令變數是共用的

    你可以使用%area%ERRORLEVEL%%了,

    因%areatmp%=%area%ERRORLEVEL%%

    PS:

    Batch 不等於 cmd

    Batch 只是一個預先寫好 cmd 指令的方法

    你可以email我

還有問題嗎?立即提問即可得到解答。