1

一部のタスクを簡単にするために、WinPE 用の次の Windows バッチ スクリプトを作成しました。

@ECHO OFF
CLS

:MENU
SETLOCAL
SET QUIT=FALSE
SET /P INPUTCHOICES=Type 1, 2, 3 or 4 and press ENTER: 
CALL :EXECUTECHOICES %INPUTCHOICES%
ENDLOCAL

GOTO :EOF

:EXECUTECHOICES
IF [%1]==[] (GOTO :MENU) ELSE (CALL :%1)
SHIFT
GOTO :EXECUTECHOICES

GOTO :EOF

:1
cls
SET /P RB_OR_SD=Type R to reboot or type S to shutdown your PC when done, and press ENTER: 
ECHO Performing task 1
ECHO.
pause
IF "%RB_OR_SD%"=="R" (GOTO :3)
IF "%RB_OR_SD%"=="S" (GOTO :4)
ELSE (GOTO :3)

:2
cls
SET /P RB_OR_SD=Type R to reboot or type S to shutdown your PC when done, and press ENTER: 
ECHO Performing task 2
ECHO.
pause
IF "%RB_OR_SD%"=="R" (GOTO :3)
IF "%RB_OR_SD%"=="S" (GOTO :4)
ELSE (GOTO :3)

:3
cls
ECHO The system will now reboot
ECHO.
pause
GOTO :MENU

:4
cls
ECHO The system will now shutdown
ECHO.
pause
GOTO :MENU

GOTO :EOF

このスクリプトは、ユーザーが 1、2、3、4、R、または S 以外のものを入力するまで、正常に動作しているようです。

INPUTCHOICES間違った記号があると、 「指定されたバッチ ラベルが見つかりません」というメッセージが表示され、プロンプトがリロードされます。

しかし、スクリプトに R または S 以外のものを入れるとRB_OR_SD、次の使用可能なバッチ ラベルが実行されるだけであり、これはまったく問題ありません。

ユーザー入力を、 、、およびのスコープから、およびおよびのスコープから1 つの記号だけに制限したいと考えています。1234INPUTCHOICESRSRB_OR_SD

できれば、ユーザー入力の大文字と小文字を区別しないようにします。

どんな助けでも大歓迎です。

4

2 に答える 2