2013-05-15 191 views
3

我有兩個關於正在處理的批處理腳本的問題。我意識到批處理腳本的問題很常見,但還沒有找到答案我的確切問題,所以我想我會試着問。有問題的區域是菜單上的用戶輸入部分。批處理腳本輸入問題

有兩個問題:1)輸入的輸入不是指定的選項之一會導致腳本跳轉到隨機區域。並且2)使用外部程序的某些部分即使在我知道語法和標誌使用通常是正確的時候也不會使用%input%(因爲我可以手動運行它們......所以出於某種原因,輸入不是'捕捉他們)。

第一個問題例如:

:MenuOne 
echo Select one of the following options: 
echo 1) x 
echo 2) y 
echo Q) Quit 

set INPUT= 
set /P INPUT=[1,2,Q]: %=% 
If "%INPUT%"=="1" goto xoption 
If "%INPUT%"=="2" goto yoption 
If /I "%INPUT%"=="Q" goto Quit 

:xoption 
@REM Here goes a lot more submenus and/or options that actually run tools via cmd. 

:yoption 
@REM Again, menus and/or tools being invoked, in a listed menu, designed like above. 

:Quit 
echo Quitting... 
exit 

如果用戶鍵入「B」的選擇提示,我很樂意爲腳本的時候給出錯誤和重複菜單。相反,它會混在其他菜單中。我猜我需要一些ELSE語句?有沒有人有我可以用來實現這個目標的例子?

第二期一些命令沒有正確使用%input%並返回一個錯誤,就像它從未收到%input%一樣。

set /P INPUT=[Testone Input]: %testone% 
set /P INPUT=[Testtwo Input]: %testtwo% 
commandtorun.exe -f %testone% -h %testtwo% 

謝謝!

回答

0

最好使用choicehttp://ss64.com/nt/choice.html),因爲它會繼續下去,直到你設置正確的輸入

CHOICE /C XYQ /M "Select of the following options [X,Y,Q]" 
if errorlevel 1 goto :x 
if errorlevel 2 goto :y 
uf errorlevel 3 goto :q 

然而,它仍然可以與國際單項體育聯合會

set INPUT= 
set /P INPUT=[1,2,Q]: %=% 
If "%INPUT%"=="1" goto xoption 
If "%INPUT%"=="2" goto yoption 
If /I "%INPUT%"=="Q" goto Quit 
rem -- will be executed only if the all the above are not true 
goto :eof 

完成對於第二個問題..您沒有正確使用SET /P(變量的名稱應該在前面),或者您嘗試了一些我不明白的地方(使用輸入變量的地方):

set /P testone=[Testone Input]: 
set /P testtwo=[Testtwo Input]: 
commandtorun.exe -f %testone% -h %testtwo% 
+0

注意:如果OP使用的是Windows XP,默認情況下「choice」不可用。 – michaelb958

+0

真棒答案 - 我不能相信我使用set/P錯誤。你是對的,我基本上是通過不使用兩個不同的變量來覆蓋舊的輸入。現在工作,非常感謝!編輯:正如michaelb958說的那樣,我試過了。哦,回到設置/ P現在工作得很好:)謝謝 – Interrupt

0

在您的程序中,您的所有選擇都會落入下一個。如果沒有輸入相關選項,則將運行:xoption:yoption。每個那些也許應該回到菜單執行後:

:MenuOne 
echo Select one of the following options: 
echo 1) x 
echo 2) y 
echo Q) Quit 

set INPUT= 
set /P INPUT=[1,2,Q]: %=% 
If "%INPUT%"=="1" goto xoption 
If "%INPUT%"=="2" goto yoption 
If /I "%INPUT%"=="Q" goto Quit 

echo Invalid selection. 
echo. 
goto MenuOne 

:xoption 
@REM Here goes a lot more submenus and/or options that actually run tools via cmd. 
goto MenuOne 

:yoption 
@REM Again, menus and/or tools being invoked, in a listed menu, designed like above. 
goto MenuOne 

一個真正簡單的方法,以確保有效的做出選擇是使用choice命令,而不是set /P。這將迫使用戶輸入一個值:

choice -c 12Q 
echo %errorlevel% 

choice命令將返回所選擇的字符(圖1,在上述實施例2或3)的索引。一個好處是它不區分大小寫,所以你不必擔心檢查Qq

+0

謝謝!事實證明,選擇不適用於我。但是你所建議的一切都工作。非常感激。 – Interrupt