我有一个批处理文件,要求用户输入一个特定的数字。如果数字介于给定的一组数字之间,则会转到该标签。但是,假设用户将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个月前发现它一样。
答案 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 askforsips
或exit /B
明确终止;