2014-03-07 63 views
2

所以我想編寫一個可選的,用戶可以輸入y或n的關閉。這就是我一直在嘗試的:如何獲取用戶輸入 - 批處理?

@echo off 
    echo          ---WARNING--- 
    echo. 
    echo DO YOU WANT YOUR COMPUTER TO SHUTDOWN? (y/n) 
    If /I "%Input%"=="y" goto yes 
    If /I "%Input%"=="n" goto no 
    :yes 
    shutdown /s 
    :no 
    pause 

我是否在正確的軌道上?

回答

3

嘗試添加。我還加了一個goto,因爲如果你輸入的東西不是yes,那麼它會自動轉到yes。

set /p Input=Enter Yes or No: 

失敗的代碼,你可以添加這個,但底部的代碼應該工作。

set /P INPUT=Type input: %=% 
If %INPUT%=="y" goto yes 
If %INPUT%=="n" goto no 

您的代碼應該是這樣的:

@echo off 
echo          ---WARNING--- 
echo. 
echo DO YOU WANT YOUR COMPUTER TO SHUTDOWN? (y/n) 
set /p Input=Enter Yes or No: 
If /I "%Input%"=="y" goto yes 
goto no 
:yes 
shutdown /s 
:no 
pause 
1

這裏是我會做:

@echo off 
setlocal 

:again 
set /p ans=Do you want to do something? (y/n) 
if /i "%ans:~0,1%" EQU "Y" (
    Echo you selected Yes. 
    REM do yes stuff 
) ELSE (if /i "%ans:~0,1%" EQU "N" (
    Echo you selected No. 
    REM Do no stuff 
    ) ELSE (
    Echo You need to select yes or no only. 
    goto :again 
    ) 
) 

這樣一來,你趕上,如果他們不輸入任何有或否,並捕獲是否輸入任何變更是或否

1

另外更簡單的方法在兩行做到這一點,而無需使用IF語句是這樣的:

2行編輯:

choice /c yn /n /m "DO YOU WANT YOUR COMPUTER TO SHUTDOWN? (y/n)" 
goto %ERRORLEVEL% 

整個代碼(含2行編輯):

@echo off 
echo          ---WARNING--- 
echo. 
choice /c yn /n /m "DO YOU WANT YOUR COMPUTER TO SHUTDOWN? (y/n)" 
goto %ERRORLEVEL% 
:1 
shutdown /s 
:2 
pause 

選擇的解釋,一內置命令:

該工具允許用戶從選項列表中選擇一個項目並返回所選選項的索引。 /c yn指定用戶必須選擇的選項。 /n隱藏用戶的默認提示。 /m給用戶定製了一條消息,在" "中定義。第二行需要的是goto %ERRORLEVEL%,它將代碼發送到代碼中所需的:%ERRORLEVEL%(此解釋僅適用於選擇命令,%ERRORLEVEL%可用於許多其他方式)返回1到x之間的數字,其中x是選擇的總數。在這個例子中,當按下y時將返回1,當按下n時將返回2。

編輯: 你是有點正軌,但你只是在使用錯誤的命令。你可以實現我的修補程序的另一種方法是這樣的:

@echo off 
echo          ---WARNING--- 
echo. 
choice /c yn /n /m "DO YOU WANT YOUR COMPUTER TO SHUTDOWN? (y/n)" 
set INPUT=%ERRORLEVEL% 
if %INPUT% EQU 1 goto yes 
if %INPUT% EQU 2 goto no 
:yes 
shutdown /s 
:no 
pause 

對於if命令,你有平等的C++語法。批量中,您使用EQU等於,NEQ不等於,LSS小於,LEQ小於等於,GTR大於等於GEQ大於等於。有關更深入的信息,您可能需要在下一次打開命令提示時執行if /?。它充滿了許多信息。

這也消除了任何id10t用戶錯誤,這意味着任何用戶可以做的嘗試打破它或錯誤地使用它。

〜燒傷