Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 批量LEQ&;GEQ问题_Windows_Batch File - Fatal编程技术网

Windows 批量LEQ&;GEQ问题

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

所以我正在做一个批处理项目,没有任何想法,但我只是为了好玩,我正在尝试这样做,如果你不是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 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岁不算问题。A
    GOTO
    不是对函数的调用。它只是将程序的执行放在代码中的标签上,然后从那里继续执行所有代码。自从计算机诞生以来,
    GOTO
    在每一种使用它的语言中的功能差不多。@jwdonahue,最初提供的答案是为了展示一种特定的方法,我认为它已经做到了。我这样做是因为当时的建议是建议使用
    Call
    和/或
    GoTo
    ,这两种方法都会增加不必要的开销。这是一个社区wiki,您可以随意进行改进/添加,或者只需查看设置答案格式时使用的语法即可。