在Windows XP中创建批处理脚本。以下是我遇到问题的代码片段:
::==============================================================::
::How many scripts are included in this program?
SET NumOfScripts=4
::==============================================================::
:mainmenu
CLS
ECHO [MAIN MENU]
ECHO Please choose from the following options to run a particular script:
set /p choice="[1] SCRIPT1.bat | [2] SCRIPT2.bat | [3] SCRIPT3.bat | [4] SCRIPT4.bat : "
IF %choice% EQU 1 CALL :SCRIPT1
IF %choice% EQU 2 CALL :SCRIPT2
IF %choice% EQU 3 CALL :SCRIPT3
IF %choice% EQU 4 CALL :SCRIPT4
REM Wrong Choices
IF %choice% GTR %NumOfScripts% (
(ECHO You have entered an invalid option. Please press any key to be taken back to the main menu.) & PAUSE & GOTO:mainmenu
)
IF %choice% LEQ 0 (
(ECHO You have entered an invalid option. Please press any key to be taken back to the main menu.) & PAUSE & GOTO:mainmenu
)
ECHO You have entered an invalid option. Please press any key to be taken back to the main menu
PAUSE & GOTO:mainmenu
在REM Wrong Choice
下查看,前两个参数可以正常工作,但是,如果用户没有输入任何值(只按下回车键),它会自动终止脚本。我已添加IF NOT DEFINED choice
但这不起作用...我也尝试了IF [%choice%]==[]
和IF [%choice%] EQU []
,但这些也无效。
这是有趣的事情......你输入一个无效的数字,比如5或-1,它会给出回声并返回到主菜单,因为它应该...然后如果你只是按回车而没有输入值它会回显并返回主菜单。
我的问题是你是如何认识到用户没有在第一次输入set / p的值?
答案 0 :(得分:4)
您可以在choice
之前将set /p
初始化为某个无效值,例如:
SET choice=none
要打印相应的错误消息,您可以执行
IF %choice% EQU none (
(ECHO You did not select an option.) & PAUSE & GOTO:mainmenu
)
答案 1 :(得分:3)
如果用户未输入文本,则设置/ p不会更改变量的内容 因此,您只需将变量设置为空即可检测用户是否输入任何内容 设置“choice =”
或者您可以使用errorlevel,因为如果输入为空,则设置为1 但是要小心,因为它没有将它重置为0.所以你必须先自己强制它。
cd.
Set /p choose=
If %errorlevel%==1 goto empty
你应该使用延迟扩展的变量,因为它总是安全的。 否则,用户可以使用“& exit”等输入来破坏脚本