批次比较报表细分

时间:2013-04-10 18:30:12

标签: if-statement batch-file goto

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

: 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部分?!?!我做错了什么?

1 个答案:

答案 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'的条目......但这是一个副作用......)