我为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
,2
,3
和4
的范围内,使用一个符号来限制用户输入INPUTCHOICES
,从R
和S
的范围开始,RB_OR_SD
。
最好使用户输入不区分大小写。
任何帮助将不胜感激。
答案 0 :(得分:0)
我不确定我是否完全了解您要达到的目标,但是我认为这可能会为您提供帮助:
ReceiveMessagesFromRabbitMQ.js
答案 1 :(得分:0)
只是限制自己回答您的问题,而不对您的代码进行任何更改/编辑...
使用 findstr
检查是否输入:
if [length == 1] /be [begin/end] with one number [1,2,3,4] and operator || == return non 0
setlocal EnableDelayedExpansion
:menu
cls & setlocal & set "_quit=false"
set /p "_input=type 1, 2, 3 or 4 and press enter: " || goto :menu
<con: echo\%_input%| 2>nul %__AppDir__%findstr.exe/be [1-4] >nul || goto :menu
the command here only execute if findstr command return 0
如果输入fail goto :menu
如果输入不在游侠1-4 goto :menu
与 r b case-insensitive
类似:
setlocal EnableDelayedExpansion
:menu
cls & setlocal & set "_quit=false"
set /p "_input=type r or s and press enter: " || goto :menu
<con: echo\%_input%| 2>nul %__AppDir__%findstr.exe/be "r s" >nul || goto :menu
the command here only execute if findstr command return 0
@ECHO OFF
CLS
cd /d "%~dp0"
SetlocaL EnableDelayedExpansion
:MENU
SET "QUIT=FALSE"
set "INPUTCHOICES="
2>nul (
SET /P "INPUTCHOICES=Type: 1, 2, 3 or 4 & press [ENTER] "
) || goto :MENU
2>nul (
echo\!INPUTCHOICES!| findstr /rbe [1-4] >nul
) || goto :MENU
for /l %%i in (1 1 4)do if %%i equ !INPUTCHOICES! CALL :%%i
ENDLOCAL
GOTO :EOF
:1
cls
set "RB_OR_SD="
2>nul (
SET /P "RB_OR_SD=Type R to reboot or type S to shutdown your PC when done, and press ENTER: "
) || goto :1
2>nul (
echo\!RB_OR_SD!| findstr /be "R S" >nul
) || goto :1
ECHO Performing task 1
ECHO.
pause
IF "%RB_OR_SD%"=="R" (GOTO %:^3)else GOTO %:^4
:2
cls
set "RB_OR_SD="
2>nul (
SET /P "RB_OR_SD=Type R to reboot or type S to shutdown your PC when done, and press ENTER: "
) || goto :2
2>nul (
echo\!RB_OR_SD!| findstr /be "R S" >nul
) || goto :2
ECHO Performing task 2
ECHO.
pause
IF "%RB_OR_SD%"=="R" (GOTO %:3)else GOTO %:4
:3
cls
ECHO The system will now reboot
ECHO.
pause
GOTO :MENU
:4
cls
ECHO The system will now shutdown
ECHO.
pause
GOTO :MENU