2013-10-28 157 views
1

好日子,批處理文件else語句不能正常工作

我還是有點新的批處理文件,並從C++來和java有些東西是不同勢...

我有一個主一批這就要求一個子批處理,但是當它返回時,它會進入else循環,我不知道爲什麼?

在主批次

用戶選擇並選擇:

set /p input=Enter: 

if %input%==1 goto check 
if %input%==2 goto check 
if %input%==3 goto check 
if %input%==4 goto delete 
if %input%==A call %cd%\subbatch.bat %var1% %var2%\ 
if %input%==B call %cd%\subbatch2.bat %var1% %var2% 
if %input%==C call %cd%\subbatch3.bat %var1% %var2% 
if {%input%}=={} (
    echo. 
    echo Please enter a valid option 
    echo. 
    pause >nul 
) else (
    echo %input% 
    echo. 
    echo Please enter a valid option 
    echo. 
    pause >nul 
) 

它轉到subbatch,並且當其返回它進入在else循環,

我中添加的回聲%輸入%看到別人循環選擇什麼,

它表明輸入是AB或C取決於我已經選擇,

但是我希望其他COMAND只踢如果選擇比1-4或A-C以外的任何其他選項,

會,如果是更好的嘗試:

if %input% GTR 4 (echo enter valid option) 

,但如果我這樣做,怎麼樣的信嗎?

有沒有辦法比較字母?如:

if %input% GTR "C" (....) 

回答

1

有了這種菜單,更好的選擇是使用choice命令,只允許所需的選項。

但是

爲什麼執行進入if的else部分。因爲它是這樣說的。該檢查爲is input empty ?,如果用戶選擇了某些內容,則輸入不爲空,因此if條件爲false並執行其他操作。

如果你想保留的if else結構,更好地做這種方式

if "%input%=="a" (
    .... 
) else if "%input%"=="b" (
    .... 
) else if "%input%"=="1" (
    .... 
) else (
    rem AND HERE falls the bad options 
) 
+0

謝謝回答,這是有道理的!並感謝您的建議,會放棄它, – Zealotwraith