2013-11-21 146 views
1

有誰知道這是爲什麼不工作?我希望它要求一個字符串,比如1,2或者exampletext。然後它檢查輸入值是否爲1,然後它將變量更改爲ABC,如果它是2,則它變爲DEF,否則保持不變。批處理文件變量操作

@echo off 
set /p id="Enter ID: " %=% 
IF "%id%" == "1"(
    set id="ABC" 
) 
ELSE (
    IF "%id%" == "2"(
     set id="DEF" 
    ) 
    ELSE (
     PING 127.0.0.1 -n 0.1 >nul 
    ) 
) 
Start "" "C:\Users\Comp\Desktop\livestreamer-1.5.2-win32\livestreamer.exe" twitch.tv/%id% mobile_High 

回答

5

雖然喬伊已經指出了錯誤的原因,我無法抗拒的誘惑,向您展示一個不同的方法來做到這一點:

@echo off 
setlocal EnableDelayedExpansion 

rem Define the table of equivalences: 
set equiv[1]=ABC 
set equiv[2]=DEF 

set /p "id=Enter ID: " %=% 
if defined equiv[%id%] (
    set id=!equiv[%id%]! 
) ELSE (
    PING 127.0.0.1 -n 0.1 >nul 
) 
Start "" "C:\Users\Comp\Desktop\livestreamer-1.5.2-win32\livestreamer.exe" twitch.tv/%id% mobile_High 

此方法使用陣列。如果您對此方法感興趣,請搜索「延遲擴展」和「批量數組」。

+0

它使用了幾個看起來像一個數組的環境變量;) - 但的確如此,如果可能值的列表變得更長,那麼這是一個不錯的選擇。 – Joey

+0

數組?批量中沒有單個數組。 ':-)' – Endoro

+1

@Endoro:不好意思「Ansgar」,我忘了! '';-) – Aacini

3

你只是缺少一些空格(在if的左括號之前)。而else需要去在同一行收盤parenthesis¹:

IF "%id%" == "1" (
    set id=ABC 
) ELSE (
    IF "%id%" == "2" (
     set id=DEF 
    ) ELSE (
     PING 127.0.0.1 -n 0.1 >nul 
    ) 
) 

還要注意後set=都在變,這是不是你想要的這裏逐字包括該報價。

您也可以簡化一下:

if "%id%=="1" (
    set id=ABC 
) else if "%id%=="2" (
    set id=DEF 
) else (
    ping localhost -n 1 >nul 
) 

¹這是即使在help if闡明的第一頁上:「else子句必須在同一行後,該命令會發生。IF」

+0

非常感謝!我不知道1-2個空格會導致錯誤。我仍然是批量編碼的新手。 – nonion