在批处理中使用多个 GTR、LEQ 等 "if" 语句

Using Multiple GTR, LEQ, etc "if" statements in Batch

我有一个要求用户输入特定数字的批处理文件。如果数字介于给定的一组数字之间,它将转到该标签。但是,假设用户输入 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 创建的东西寻求帮助。是的,我知道 batch 已经过时了,但我似乎很喜欢它,因为我大约 2 个月前就发现了它。

您的代码中的 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;在您的代码中,如果满足 none 的条件而值为零,也会执行 :waitwhat ; final (lonely) goto waitwhat 这里不需要,但是会发生什么更明显;
  • 引入了一个新标签 :askforsips 以允许另一个用户输入,以防给出无效值(零或更小);
  • 变量 numberofsips 现在在用户提示之前重置,因为如果用户只按 ENTER;[=47=,set /P 会保留以前的值]
  • :waitwhat:waytoomuch 的每个部分都明确终止,由 goto askforsipsexit /B;