所以,我要求用户做出选择。这个问题的关键是要抓住用户是否在没有任何输入的情况下点击进入。我的计划是找出用户是否输入任何内容并点击输入。如果是,则显示它不是有效选项并返回:START
。以下代码不起作用 - 尤其是空输入和仅具有space
字符的输入。如果用户做了这个无效的事情,那么我只想显示消息说它是空的。
关于如何处理这个问题的任何建议都将非常感激。
@echo off
:START
cls
echo Choose your option & echo.
echo [P] play
echo [R] rules
echo [M] main menu
echo [E] exit
set /p "cho=->"
if %cho%==e (goto EXIT
) else if /I %cho%==m (goto MAINMENU
) else if /I %cho%==r (goto GAMERULES
) else if /I %cho%==p (goto GAMERULES
) else if %cho%=="" (goto EMPTYINPUT
) else if %cho%==" " (goto EMPTYINPUT
) else cls
echo That is not valid
pause
:EMPTYINPUT
echo This is not a valid option.
pause
goto START
答案 0 :(得分:2)
如果您使用choice
代替set /P
,则可以避免所有选项识别问题。选择命令将仅响应您定义的一组有限的键,因此其答案始终正确。
@echo off
:START
cls
echo Choose your option & echo.
echo [P] play
echo [R] rules
echo [M] main menu
echo [E] exit
choice /C PRME /N /M "->"
goto option-%errorlevel%
:option-1 PLAY
echo In play
pause
goto start
:option-2 GAMERULES
echo In game rules
pause
goto start
:option-3 MAINMENU
echo In main menu
pause
goto start
:option-4 EXIT
echo Bye...
goto :EOF
有关详细信息,请键入:choice /?
答案 1 :(得分:1)
你也可以尝试使用这样的动态菜单:
@echo off
Mode con cols=90 lines=15
:menuLOOP
Mode con cols=70 lines=15
Cls & color 0B
Title Example of Dynamic Menu
echo(
echo( ============================Menu===========================
echo(
for /f "tokens=2* delims=_ " %%A in ('"findstr /b /c:":menu_" "%~f0""') do echo( %%A %%B
echo(
echo( ============================================================
set choice=
echo( & set /p choice=Make a choice or hit ENTER to quit: || GOTO :EOF
echo( & call :menu_[%choice%]
GOTO:menuLOOP
:menu_[P] PLAY
cls & Color 0A
echo.
echo In play
pause
GOTO:menuLOOP
:menu_[G] GAMERULES
cls & Color 0C
echo.
echo In game rules
pause
GOTO:menuLOOP
:menu_[M] MAINMENU
cls & Color 0D
echo.
echo In main menu
pause
GOTO:menuLOOP
:menu_[E] EXIT
echo Bye...
Exit