2013-04-10 22 views
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 /I %uninstallNr% LEQ %count% goto uninstaller 
if /I '%uninstallNr%'=='M' goto menu 

前加

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

然后一切顺利的uninstallerError节?!?!我究竟做错了什么?

+0

就应该替换所有单引号与双引号,然后再试一次。 – Endoro 2013-04-10 18:47:05

+0

这在大约十几个带​​有单引号的脚本中起作用,我认为它与LEQ语句有关,但不知道它如何影响它。因为如果我把它解决了,一切正常(除非我没有办法测试数字) – Flynn 2013-04-10 19:40:12

+0

这不起作用:'如果'%uninstallNr%'==''goto uninstallerError'。这是无稽之谈。 – Endoro 2013-04-10 19:52:56

回答

0

几个问题。

可能

if not defined uninstallnr goto wherever 

比报价更好的版本。因人而异。

其次,如果使用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”的条目......但这是一个侧面的问题...)

+0

最初的目标是,如果你按下输入键,那么你不符合总菜单计数或按M的要求,从而进入错误提示,这也意味着如果你把任何数字放在柜台上也去了它,我添加该标签的唯一原因就是在该东西不工作时跳到它。除了这里以外,其他地方都可以工作,一旦我添加LEQ语句,整个事情就会崩溃。 – Flynn 2013-04-10 19:09:02

+0

好吧,我添加如果未定义%uninstallNr%goto uninstallerError下的goto菜单部分,它仍然不工作,但我注意到一些东西,但我得到一个错误,说%count%是它打破的地方。在这个例子中的计数是9个项目,它是说“9这是意外” – Flynn 2013-04-10 19:46:42

+0

好吧,我很笨,没有%前后变量: 如果没有定义uninstallNr goto uninstallerError – Flynn 2013-04-10 19:56:06