0

我有一个选择菜单,由于某种原因正在崩溃。编码:

: 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 键会做它应该做的事情,但是按 enter 键会破坏脚本。

现在如果我添加

if '%uninstallNr%'=='' goto uninstallerError

if /I %uninstallNr% LEQ %count% goto uninstaller
if /I '%uninstallNr%'=='M' goto menu

然后一切都进入uninstallerError部分?!?!我究竟做错了什么?

4

1 回答 1

0

几个问题。

可能

if not defined uninstallnr goto wherever

比引用的版本好。YMMV。

其次,如果你使用,IF /I那么比较是逐个字符进行的,所以 '12' 小于 '2' 因为 '1' 小于 '2'

第三,批处理只是通过标签直接收费,因此,如果您的 IF 语句由于条件不正确而没有转到任何地方,那么批处理将简单地继续通过: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 的条目很高兴地进入卸载程序。m 到 Menu,否则到 UNINSTALLERROR。

(考虑一下输入“0”……但这是一个附带问题……)

于 2013-04-10T18:49:06.820 回答