使用多个GTR,LEQ等"如果"批处理

时间:2015-11-16 23:30:43

标签: batch-file if-statement set

我有一个批处理文件,要求用户输入一个特定的数字。如果数字介于给定的一组数字之间,则会转到该标签。但是,假设用户将100放到:smallsip

总而言之,我试图做到这一点,以便如果用户键入特定范围内的数字(I.E 30-99),它将转到特定标签。有什么建议吗?

:getadrink
cls
echo How many sips will Jackie Chan drink?

set /p numberofsips=Type Number of Sips Here: 

if %numberofsips% LSS 0 goto waitwhat
if %numberofsips% GEQ 1 goto smallsip
if %numberofsips% GEQ 10 goto plenty
if %numberofsips% GEQ 30 goto toomuch
if %numberofsips% GEQ 100 goto waytoomuch

:waitwhat
cls
echo what
pause
:smallsip
cls
echo small sips
pause
:plenty
cls
echo plenty
pause
:toomuch
cls
echo too much!
pause
:waytoomuch
cls
echo WAY TOO MUCH
pause

P.S。我一直潜伏在这里的众多帖子中,为我用Batch创建的东西获得帮助。是的,我知道批次已经过时了,但我似乎喜欢它,就像我在2个月前发现它一样。

1 个答案:

答案 0 :(得分:1)

代码中的if语句正常工作,但您的逻辑错误。例如,当您键入数字50时,条件%numberofsips% GEQ 1已经满足,因此永远不会达到以下if语句。要解决这个问题,只需改变它们的顺序即可。

另一个问题是,你陷入了你不想被执行的代码。例如,当部分:smallsip完成(并且您确认pause)时,无意中继续执行:plenty。为避免这种情况,您需要goto跳转到其他位置或exit /B才能离开批处理脚本。

这是一个固定的代码:

:getadrink
cls
echo How many sips will Jackie Chan drink?

:askforsips
set numberofsips=0
set /p numberofsips=Type Number of Sips Here: 

if %numberofsips% GEQ 100 goto waytoomuch
if %numberofsips% GEQ 30 goto toomuch
if %numberofsips% GEQ 10 goto plenty
if %numberofsips% GEQ 1 goto smallsip
goto waitwhat

:waitwhat
cls
echo what?
pause
goto askforsips
:smallsip
cls
echo small sips
pause
exit /B
:plenty
cls
echo plenty
pause
exit /B
:toomuch
cls
echo too much!
pause
goto askforsips
:waytoomuch
cls
echo WAY TOO MUCH
pause
goto askforsips

这些是我改变的事情:

  • if查询的顺序相反;
  • 删除if %numberofsips% LSS 0查询,如果输入的值为零或更少,则执行:waitwhat;在您的代码中,:waitwhat也被执行,以防值为零,因为没有满足任何条件;这里不需要最后的(孤独的)goto waitwhat,但更明显的是会发生什么;
  • 引入了新标签:askforsips,以便在给出无效值(零或更少)的情况下允许其他用户输入;
  • 变量numberofsips现在在用户提示之前重置,因为如果用户只按 ENTER set /P会保留前一个值;
  • :waitwhat:waytoomuch的每个部分均由goto askforsipsexit /B明确终止;