我有一个选择菜单,由于某种原因正在崩溃。代码:
: uninstallerMenu
echo REMOVE ME! total items %count%
set uninstallNr=
set /P uninstallNr=Please select a number:
echo %uninstallNr%
if /I %uninstallNr% LEQ %count% goto uninstaller
if /I '%uninstallNr%'=='M' goto menu
:: Uninstaller Error Handler
: uninstallerError
cls
echo.
echo ==================== INVALID INPUT ====================
echo _______________________________________________________
echo.
echo Please select a number or 'M' to go to Main Menu
echo _______________________________________________________
echo.
echo ============== PRESS ANY KEY TO CONTINUE ==============
pause>null
cls
if '%opt%'=='64' goto progList64
if '%opt%'=='32' goto progList32
goto menu
问题在于小于或等于检查。如果我把%uninstallRn%LEQ%count%,它将检查它并将其发送给卸载程序,如果它是真的,按M键执行它应该做的事情,但按回车键会破坏脚本。
现在如果我添加
if '%uninstallNr%'=='' goto uninstallerError
前
if /I %uninstallNr% LEQ %count% goto uninstaller
if /I '%uninstallNr%'=='M' goto menu
然后一切都进入uninstallerError部分?!?!我做错了什么?
答案 0 :(得分:0)
几个问题。
可能
if not defined uninstallnr goto wherever
比引用的版本好。 YMMV。
其次,如果您使用IF /I
,则逐个字符进行比较,因此'12'小于'2',因为'1'小于'2'
第三,批量只是通过标签收费,所以如果你的IF语句因为条件不正确而无法在任何地方进行GOTO,那么批量只会继续:uninstallerError
标签 - 可能不包括顺便说一下,如果你打算将它用作GOTO
(或CALL
的目的地)的空间,
哦 - 双引号是定义字符串的方法。使用单引号或[]
仅在变量不包含空格(以及其他一些字符)时才有效
此外,它不是null
,而是nul
(您创建了一个名为null
的文件)
AIUI,您当前的代码是
SETLOCAL
SET count=3
set uninstallNr=
set /P uninstallNr=Please select a number:
echo %uninstallNr%
if '%uninstallNr%'=='' goto uninstallerError
if /I %uninstallNr% LEQ %count% goto uninstaller
if /I '%uninstallNr%'=='M' goto menu
:: Uninstaller Error Handler
:uninstallerError
ECHO AT uninstallererror
GOTO :eof
:uninstaller
ECHO AT uninstaller
GOTO :eof
:menu
ECHO AT menu
GOTO :eof
或类似。
我已将COUNT设置为内联。
1,2或3的输入对于UNINSTALLER来说非常愉快。 m到菜单,否则到UNINSTALLERROR。
(当你在它的时候考虑一个'0'的条目......但这是一个副作用......)