Windows 批量LEQ&;GEQ问题
所以我正在做一个批处理项目,没有任何想法,但我只是为了好玩,我正在尝试这样做,如果你不是16岁或更大,它会说离开,如果不是,它会说你可以继续,但是,如果我输入小于16,它工作正常,如果我输入大于或等于16,它会返回两条消息Windows 批量LEQ&;GEQ问题,windows,batch-file,Windows,Batch File,所以我正在做一个批处理项目,没有任何想法,但我只是为了好玩,我正在尝试这样做,如果你不是16岁或更大,它会说离开,如果不是,它会说你可以继续,但是,如果我输入小于16,它工作正常,如果我输入大于或等于16,它会返回两条消息 echo Core 0.0.1 echo By Supergrupgr echo SpukkitDev 2020 echo Hit a key to continue pause>nul echo What is your age set /p age= goto de
echo Core 0.0.1
echo By Supergrupgr
echo SpukkitDev 2020
echo Hit a key to continue
pause>nul
echo What is your age
set /p age=
goto determine
:determine
if %age% GEQ 16 goto oldenough
if %age% LEQ 15 goto min
:oldenough
echo You are old enough... What will you now do.
:min
echo You are not old enough... Leave.
pause
批处理文件只需跳转到
goto
然后它继续从那里执行。它不会跳过下一个标签
两种解决方案:
goto
语句call
运行它们下面是一个帮助您的布局示例:
@Echo关闭
回声核心0.0.1
超重力回波
Echo SpukkitDev 2020
“%\uuuu AppDir\uuuuu%timeout.exe”/T 5
设置“年龄=0”
设置/P“年龄=你的年龄是多少?>”
如果%age%Lss 16(
回音=
你还不够大…离开。
回音=
“%\uuuu AppDir\uuuu%timeout.exe”/T 3/NoBreak 1>NUL
退出/B 1
)
你已经足够大了。。。你现在要做什么?
“%\uuuu AppDir\uuuuu%timeout.exe”/T 3 1>NUL
我已经包括了最后一行,只是为了防止窗口快速关闭,如果不是从命令提示符运行的话
要了解有关每个命令的详细信息,请打开命令提示窗口,然后根据需要输入以下各项:Echo/?
,“%\uuuu AppDir\uuuuuu%timeout.exe”/?
,设置/?
,如果/?
,以及退出/?
注释
=
。这实际上是一个随机字符,用于防止回波显示其当前状态(打开
或关闭
)。结果是为视觉外观输出空行Timeout
实用程序,您需要满足Windows Vista的最低要求首先,我们编写算法:
Get user's age.
If age 16 or older, go do big kid stuff and exit,
else go do little kid stuff and exit.
用代码编写类似于:
@setlocal EnableExtensions
@呼叫:设置
@如果%u年龄%GEQ 16(@call:biggidstuff)其他(@call:littlekidsuff)
@退出/b
:biggidstuff
@你已经足够大了。。。你现在要做什么?
@退出/b0
:讲师用户
@你多大了?请输入一个介于0和199之间的数字。
@退出/b0
:小家伙
@你还不够大。。。离开
@退出/b 1
:设置
:_tryAgain
@呼叫:讲师用户
@设置/p_年龄=
@rem检查数字输入和年龄限制:
@设置_inputVerified=0
@对于(0,1199)do@(@if“%%N”eq“%\u age%”@set\u inputVerified=1)中的/L%%N
@如果不是%\u inputVerified%eq 1(@goto:_tryAgain)
@rem如果我们到这一步,我们的有效输入在0..199范围内。
@退出/b0
注意:我没有对此做很多测试,但我认为至少涵盖了所有代码路径一次。试试看
有关上述代码的详细信息,请参见帮助设置本地
,帮助帮助呼叫,帮助转到,帮助如果
和帮助退出
文体注释:
- 我在整个过程中使用
@
符号,而不是@echo off
,因为它更易于与其他脚本组合,并使目标调试更容易
- 我对
goto
目标使用的标签名称与call
目标不同
- 我避免像瘟疫一样使用多行代码块(paren之间有多行代码)
是的,但它不应该执行下一次转到,因为“年龄”大于15它只执行一个转到,但从一个标签到下一个标签都失败了只需添加如果%age%GEQ 16转到结束
在回显您足够大后
并在末尾添加一个结束标签参见转到/?
并阅读最后一段。除非您告诉它,否则执行将在回显您足够大后继续…
不要这样做…阅读帮助呼叫
和帮助(如果
)。如果16岁是截止年龄,那么15岁不算问题。AGOTO
不是对函数的调用。它只是将程序的执行放在代码中的标签上,然后从那里继续执行所有代码。自从计算机诞生以来,GOTO
在每一种使用它的语言中的功能差不多。@jwdonahue,最初提供的答案是为了展示一种特定的方法,我认为它已经做到了。我这样做是因为当时的建议是建议使用Call
和/或GoTo
,这两种方法都会增加不必要的开销。这是一个社区wiki,您可以随意进行改进/添加,或者只需查看设置答案格式时使用的语法即可。