2015-11-16 107 views
1

我有一個批處理文件,要求用戶輸入一個特定的數字。如果該號碼位於給定的一組號碼之間,則轉到該標籤。然而,說用戶把100它右轉:smallsip在批處理中使用多個GTR,LEQ等「if」語句

總而言之,我想這樣做,如果用戶在特定範圍內鍵入一個數字(IE 30-99)它會轉到特定標籤。有什麼建議麼?

:getadrink 
cls 
echo How many sips will Jackie Chan drink? 

set /p numberofsips=Type Number of Sips Here: 

if %numberofsips% LSS 0 goto waitwhat 
if %numberofsips% GEQ 1 goto smallsip 
if %numberofsips% GEQ 10 goto plenty 
if %numberofsips% GEQ 30 goto toomuch 
if %numberofsips% GEQ 100 goto waytoomuch 

:waitwhat 
cls 
echo what 
pause 
:smallsip 
cls 
echo small sips 
pause 
:plenty 
cls 
echo plenty 
pause 
:toomuch 
cls 
echo too much! 
pause 
:waytoomuch 
cls 
echo WAY TOO MUCH 
pause 

P.S.我一直在這裏潛藏無數帖子,獲得我用Batch創建的東西的幫助。是的,我知道批次已經過時,但我似乎很喜歡,因爲我在2個月前發現了它。

回答

1

代碼中的if語句正常工作,但您的邏輯錯誤。例如,當您輸入一個數字50時,條件%numberofsips% GEQ 1已滿足,因此以下if語句將永遠不會到達。要解決這個問題,只需改變它們的順序。

另一個問題是,你陷入你不想執行的代碼中。例如,如果部分:smallsip已完成(並且您確認了pause),則無意中將繼續執行:plenty。爲了避免這種情況,您需要使用goto跳到別的地方或exit /B離開批處理腳本。

這裏是一個固定的代碼:

:getadrink 
cls 
echo How many sips will Jackie Chan drink? 

:askforsips 
set numberofsips=0 
set /p numberofsips=Type Number of Sips Here: 

if %numberofsips% GEQ 100 goto waytoomuch 
if %numberofsips% GEQ 30 goto toomuch 
if %numberofsips% GEQ 10 goto plenty 
if %numberofsips% GEQ 1 goto smallsip 
goto waitwhat 

:waitwhat 
cls 
echo what? 
pause 
goto askforsips 
:smallsip 
cls 
echo small sips 
pause 
exit /B 
:plenty 
cls 
echo plenty 
pause 
exit /B 
:toomuch 
cls 
echo too much! 
pause 
goto askforsips 
:waytoomuch 
cls 
echo WAY TOO MUCH 
pause 
goto askforsips 

這些是我改變的東西:

  • if查詢被反轉的順序;
  • if %numberofsips% LSS 0查詢被刪除,所以如果輸入的值爲0或更小,則執行:waitwhat;在你的代碼中,:waitwhat也被執行,以防值爲零,因爲沒有一個條件得到滿足;最後(孤獨的)goto waitwhat在這裏不是必需的,但更明顯的是發生了什麼;
  • 引入新標籤:askforsips以允許在給出無效值(零或更小)的情況下進行另一用戶輸入;
  • 變量numberofsips現在在用戶提示之前被重置,因爲set /P保持前一個值,如果用戶剛剛按ENTER;
  • :waitwhat降至:waytoomuch的每個部分都明確終止,或者由goto askforsipsexit /B;
+1

非常感謝!當我回家時我會測試它。這是一個我叫做「成龍上學」的批處理遊戲,我不會詳細說明爲什麼,但是它來自成龍看到飲水機的一部分,喝得太多會讓他生病。我知道這很愚蠢,但你明白了。再次,我會在我回家的時候測試它。 :) –

+0

它的工作原理!謝謝! :) –