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
- 变量
现在在用户提示之前重置,因为如果用户只按ENTER键,numberofsips
将保留前一个值李>set/P
- 从
到:waitwhat
的每个部分都被明确终止,可以通过:wayTooMore
或转到askforsips
李>退出/B
- 如果%numberofsips%LSS 0的