在批处理中使用多个 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 askforsips
或 exit /B
;
我有一个要求用户输入特定数字的批处理文件。如果数字介于给定的一组数字之间,它将转到该标签。但是,假设用户输入 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 askforsips
或exit /B
;