2015-09-10 76 views
0

我想表達我的意圖的稱號,但基本上這是我的批處理命令的「一部分」:批次「如果」的命令,「如果」多個條件不滿足,執行操作

set /p "choice=Enter an option: " 
if %choice% == 1 GOTO Redo 
if %choice% == 2 GOTO Remove 
if %choice% == 3 GOTO Notice 
if %choice% == 4 GOTO Cancel 
if %choice% == 5 GOTO Exit 

而且不包含1,2,3,4,或5轉到任何輸入:

我還需要同樣的功能對於不是數字輸入,所以使用EQU,NEQ誤差, GTR,LSS等將不適用於:

set /p "Option=Would you like to do ..., y/n?: " 
if %Option% == n GOTO MainMenu 
if %Option% == y GOTO Reroute 

如果不是n或y,轉到錯誤。

我用if %errorlevel% NEQ 0 goto :error等測試,無濟於事。

什麼最終發生的是,它只是跳過批次的下一部分,而不是去:error

在此先感謝您的幫助。

+0

[可能是你正在尋找這個?](http://stackoverflow.com/questions/18423443/switch-statement-equivalent-in-windows-batch-file) – Thehx

+0

我可以用這樣的東西' IF%UserInput%GTR 2 goto:error'我可以爲數字選擇工作,但如何才能讓它適用於非數字輸入。像「y」或「n」 –

回答

0

在搜索了更多內容並進一步瞭解了該主題後,我發現可以在單個命令行中使用多個「if」語句。

所以對:

set /p "Option=Would you like to do ..., yes or no?: " 
if %Option%==no GOTO MainMenu 
if %Option%==yes GOTO Reroute 

我用:

if not %Option%==no if not %Option%==yes GOTO :Error2 

它的工作就像一個魅力。我還有一段路要走,但我學到了一些東西。 感謝您指點我正確的方向。

0

您可以使用 「選擇」 不是 「如果」,像這樣:

choice /C YN /N /M "Would you like to do ..., y/n?: " 
set ERR=%ERRORLEVEL% 
if %ERR%== 1 goto Reroute 
if %ERR%== 2 goto MainMenu 
0

你不必去檢查,不包含1,2,3,4或5的任何輸入,因爲所有的有效選項已經被處理,並決不會打REM

set /p "choice=Enter an option: " 
if %choice% == 1 GOTO Redo 
if %choice% == 2 GOTO Remove 
if %choice% == 3 GOTO Notice 
if %choice% == 4 GOTO Cancel 
if %choice% == 5 GOTO Exit 
REM any other value for %choice%: 
GOTO Error 

當然,這僅適用於GOTO,但不與CALL

像IZB,竟被我d更喜歡choice命令,因爲它不會讓您選擇無效的輸入。

0

恐怕這裏有一個小混亂。看起來你沒有而是表達了你的意圖,也沒有在標題中表達過。

  • 如果您想選擇以選項執行的某一部分,更簡單的解決方案是使用choice命令IZB表示:

choice /C RDNCE /M "Redo Delete Notice Cancel Exit: " 
goto option-%errorlevel% 

:option-1 Redo 
... 

:option-2 Delete 
... 

. . . 

:option-0 Ctrl-C 
:option-5 Exit 
goto :EOF 
  • 但是,如果你想知道,如果輸入包括在有效選項列表,然後你可以使用這個方法:

setlocal EnableDelayedExpansion 

set "options=/Redo/Remove/Notice/Cancel/Exit/" 

set /P "choice=Enter an option: " 
if "!options:/%choice%/=!" equ "%options%" goto Error2 

rem Here we know that the choice is valid: 
goto %choice% 

如果選擇是在options變量的話,則替換修改該值的一個,因此結果將是比原來的不同。如果選項未包含在選項列表中,則替換失敗並且該值與原始值相同,因此在此情況下爲goto Error2

這種方法的優點是,如果有很多選項,則無關緊要;所有這些測試都通過一個簡單的if命令來實現。