Я написал следующий пакетный скрипт Windows для WinPE, чтобы упростить некоторые задачи:
@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
, 2
, 3
и 4
для INPUTCHOICES
и из области R
и S
для RB_OR_SD
.
Желательно, чтобы пользовательский ввод не учитывал регистр.
Любая помощь будет принята с благодарностью.