Batch file 使用多个全球技术法规、LEQ等“;如果;批处理语句

Batch file 使用多个全球技术法规、LEQ等“;如果;批处理语句,batch-file,if-statement,set,Batch File,If Statement,Set,我有一个批处理文件,要求用户输入一个特定的数字。如果该数字介于给定的一组数字之间,则会转到该标签。但是,假设用户放入100它会直接进入:smallsip 总而言之,我试图让它,如果用户键入一个特定范围(即30-99)内的数字,它会进入一个特定的标签。有什么建议吗 :getadrink cls echo How many sips will Jackie Chan drink? set /p numberofsips=Type Number of Sips Here: if %numbero

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

总而言之,我试图让它,如果用户键入一个特定范围(即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

顺便说一句,我一直在这里的许多帖子中徘徊,为我用Batch创建的东西寻求帮助。是的,我知道批处理已经过时了,但我只是喜欢它,因为我在大约2个月前发现了它。

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

另一个问题是,您陷入了不希望执行的代码中。例如,当部分
:smallsip
完成时(并且您确认了
暂停
),执行会在
:pluty
无意中继续进行。为了避免这种情况,您需要使用
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
这些是我改变的事情:

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

非常感谢您!我回家后会测试一下。这是我正在制作的一个名为“成龙上学”的批量游戏,我不会详细说明原因,但这是从成龙看到一个喷泉的部分开始的,喝太多会让他生病。我知道这很愚蠢,但你明白了。同样,我回家后会测试它。:)