【问题标题】:Checking Blank User Input in Batch file (No Input) [duplicate]检查批处理文件中的空白用户输入(无输入)[重复]
【发布时间】:2015-06-20 22:32:13
【问题描述】:

所以,我要求用户做出选择。这个问题的重点是捕捉用户是否在没有任何输入的情况下点击了刚刚输入的内容。我的计划是查明用户是否没有输入任何内容,只是点击输入。如果是,则显示它不是有效选项并返回: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

【问题讨论】:

标签: windows batch-file cmd scripting


【解决方案1】:

如果您使用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 /?

【讨论】:

  • 请注意,如果由于某种原因您仍在使用 XP,则必须将 choice 作为资源工具包的一部分下载。
【解决方案2】:

你也可以试试这样的动态菜单:

@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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多