我正在制作一个小型(ish)实用程序批处理文件。 我有一个主要使用多选菜单,使用单键击(无输入)。 我想在第一组选择中使用数字&然后有h& q寻求帮助&分别退出选项。但是当我在测试和运行中运行.bat时选择任何选项,出现两行文字,一行说" h此时出乎意料" &安培;关于q的第二个说法是相同的。
选项似乎工作正常,但这些消息很烦人,为什么它们甚至出现在&我怎么让它们消失?
这是我的代码。
echo off
cls
:menu1
set mypath=%~dp0
@echo %mypath%
echo.
echo .............
echo intro
echo .............
echo.
echo -more menu text here
echo.
echo 1 - option
echo 2 - option
echo 3 - option
echo 4 - option
echo 5 - option
echo 6 - option
echo 7 - option
echo h - Help
echo q - Quit Program
echo.
choice /c:1234567hq
if errorlevel 1 set m=1
if errorlevel 2 set m=2
if errorlevel 3 set m=3
if errorlevel 4 set m=4
if errorlevel 5 set m=5
if errorlevel 6 set m=6
if errorlevel 7 set m=7
if errorlevel h set m=h
if errorlevel q set m=q
if %m%==1 goto test
if %m%==2 goto test
if %m%==3 goto test
if %m%==4 goto test
if %m%==5 goto test
if %m%==6 goto test
if %m%==7 goto test
if %m%==h goto test
if %m%==q goto test
:test
echo.
echo Aha! A test message!
echo.
pause
goto menu1
我想使用h& amp;问是因为我计划有第二个菜单,其中还有其中的选项。我希望他们也在该菜单中使用相同的键。我试图让这个变得简单& "用户友好"如果可行的话,我也不想为所有选择都有任意字母。
它们不会出现在常规菜单中(带有回车),但是如果可能的话,我想让这个主菜单在单击键上运行命令。
感谢您的帮助。
答案 0 :(得分:1)
errorlevel
是指选项列表中项目的索引,它始终是一个数字。在您的示例中,h
为8,q
为9。
此外,if errorlevel [number]
表示“如果错误级别为[数字] 或更高”,那么要么需要向后列出选项,要么需要使用%errorlevel%
系统变量。最简单的方法是简单地将m
设置为%errorlevel%
并删除所有goto
,因为它们之间没有代码和它们所引用的标签。
@echo off
cls
:menu1
set mypath=%~dp0
@echo %mypath%
echo.
echo .............
echo intro
echo .............
echo.
echo -more menu text here
echo.
echo 1 - option
echo 2 - option
echo 3 - option
echo 4 - option
echo 5 - option
echo 6 - option
echo 7 - option
echo h - Help
echo q - Quit Program
echo.
choice /c:1234567hq
set m=%errorlevel%
:test
echo.
echo Aha! A test message!
echo.
pause
goto menu1