Batch file 如何使if-else语句成批连续工作?

Batch file 如何使if-else语句成批连续工作?,batch-file,if-statement,continuous,timetable,Batch File,If Statement,Continuous,Timetable,有没有一种比我现在使用的方法更简单、更符合逻辑的方法来批量生成连续的if-else语句。我对编程等非常陌生。首先,我尝试编写如下代码: if %time:~0,2% geq 8 ( if %time:~0,2% leq 9 ( start "" "C:\users\me\desktop\subject1.bat" ) else ( if %time:~0,2% leq 10 ( start "" "C:\users\me\desktop\subject2.bat"

有没有一种比我现在使用的方法更简单、更符合逻辑的方法来批量生成连续的if-else语句。我对编程等非常陌生。首先,我尝试编写如下代码:

if %time:~0,2% geq 8 (
  if %time:~0,2% leq 9 (
    start "" "C:\users\me\desktop\subject1.bat"
  ) else (
  if %time:~0,2% leq 10 (
    start "" "C:\users\me\desktop\subject2.bat"
  ) else (
    if %time:~0,2% leq 11 (
        start "" "C:\users\me\desktop\subject3.bat"
  )
) else (
Exit
)
现在的想法是,如果时间不超过8,它只会关闭程序。但是如果超过8,它会检查时间是否小于9->open subject1,小于10->subject2等。但是代码在第二个方面不起作用,所以我开始使用它,主要是因为它起作用了:

if %time:~0,2% geq 8 (
goto :check1
) else (
  Exit
)
:check1 (
  if %time:~0,2% leq 9 (
    start "" "C:\users\me\desktop\subject1.bat"
  ) else (
    goto :check2
  )
)
:check2 (
  if %time:~0,2% leq 10 (
    start "" "C:\users\me\desktop\subject2.bat"
  ) else (
    goto :check3
  )
)
:check3 (
  if %time:~0,2% leq 11 (
    start "" "C:\users\me\desktop\subject3.bat"
  )
)
第二种方法有效,但它看起来很糟糕,甚至对我来说也很难阅读。有没有更简单的方法? 我之所以写这段代码是因为我的笔记本电脑启动速度有点慢(SSHD混合驱动器而不是SSD),所以我通过自动启动(完成)和连接到wifi(也完成)并打开所需的软件和网站来补偿损失的时间。

您的第一个变体:嵌套
if
/
else
块 代码中缺少两个右括号(7×
,5×

这是您的代码,缩进略有不同:

如果%time:~0,2%geq 8(
如果%time:~0,2%leq 9(
启动“”“C:\users\me\desktop\subject1.bat”
)否则(
如果%time:~0,2%leq 10(
启动“”“C:\users\me\desktop\subject2.bat”
)否则(
如果%time:~0,2%leq 11(
启动“”“C:\users\me\desktop\subject3.bat”
)
)否则(
出口
)
您试图实现的目标可能是:

如果%time:~0,2%geq 8(
如果%time:~0,2%leq 9(
启动“”“C:\users\me\desktop\subject1.bat”
)否则(
如果%time:~0,2%leq 10(
启动“”“C:\users\me\desktop\subject2.bat”
)否则(
如果%time:~0,2%leq 11(
启动“”“C:\users\me\desktop\subject3.bat”
)
)
)
)否则(
出口
)
你也可以这样写:

if %time:~0,2% geq 8 (
  if %time:~0,2% leq 9 (
    start "" "C:\users\me\desktop\subject1.bat"
  ) else (
  if %time:~0,2% leq 10 (
    start "" "C:\users\me\desktop\subject2.bat"
  ) else (
    if %time:~0,2% leq 11 (
        start "" "C:\users\me\desktop\subject3.bat"
  )
) else (
Exit
)
如果%time:~0,2%geq 8(
如果%time:~0,2%leq 9(
启动“”“C:\users\me\desktop\subject1.bat”
)否则,如果%time:~0,2%leq 10(
启动“”“C:\users\me\desktop\subject2.bat”
)否则,如果%time:~0,2%leq 11(
启动“”“C:\users\me\desktop\subject3.bat”
)
)否则(
出口
)

您的第二个变体:平坦
if
/
else
块 另外,您的替代变体可能更简单;此外,标签后面不应跟着

如果不是%time:~0,2%geq 8(
出口
)
如果%time:~0,2%leq 9(
启动“”“C:\users\me\desktop\subject1.bat”
后藤:续
)
如果%time:~0,2%leq 10(
启动“”“C:\users\me\desktop\subject2.bat”
后藤:续
)
如果%time:~0,2%leq 11(
启动“”“C:\users\me\desktop\subject3.bat”
后藤:续
)
:续

其他问题
  • 考虑使用
    exit/B
    而不是
    exit
    ,因为前者只是退出批处理文件,而后者则终止底层命令提示符实例
  • <>代码>开始<代码>(没有<代码> /等待< /代码>选项)不等待运行批处理文件完成;考虑使用<代码>调用< /COD>命令。< /LI>
  • %time%
    变量可能包含填充零,例如,
    08:30
    ,因此
    %time:~0,2%
    扩展到
    08
    而不是空格
    8
    ;带前导零的数字被视为八进制数字,因此比较可能会失败;为了避免此类问题,您可以在
    如果
    /
    其他
    阻塞并使用变量
    %hour%
    而不是
    %time:~0,2%
    ,则:

    设置“小时=%time:~0,2%”&rem/(提取小时)
    设置“hour=1%hour:=0%”&rem//(在'1'前面加上前缀,用'0'替换前导空格)
    设置/A“hour%%=100”&rem//(删除前导“1”,最后避免前导“0”)
    要进一步使用的回显小时值:%Hour%
    
  • 第一个变量:嵌套的
    if
    /
    else
    块 代码中缺少两个右括号(7×
    ,5×

    这是您的代码,缩进略有不同:

    如果%time:~0,2%geq 8(
    如果%time:~0,2%leq 9(
    启动“”“C:\users\me\desktop\subject1.bat”
    )否则(
    如果%time:~0,2%leq 10(
    启动“”“C:\users\me\desktop\subject2.bat”
    )否则(
    如果%time:~0,2%leq 11(
    启动“”“C:\users\me\desktop\subject3.bat”
    )
    )否则(
    出口
    )
    
    您试图实现的目标可能是:

    如果%time:~0,2%geq 8(
    如果%time:~0,2%leq 9(
    启动“”“C:\users\me\desktop\subject1.bat”
    )否则(
    如果%time:~0,2%leq 10(
    启动“”“C:\users\me\desktop\subject2.bat”
    )否则(
    如果%time:~0,2%leq 11(
    启动“”“C:\users\me\desktop\subject3.bat”
    )
    )
    )
    )否则(
    出口
    )
    
    你也可以这样写:

    if %time:~0,2% geq 8 (
      if %time:~0,2% leq 9 (
        start "" "C:\users\me\desktop\subject1.bat"
      ) else (
      if %time:~0,2% leq 10 (
        start "" "C:\users\me\desktop\subject2.bat"
      ) else (
        if %time:~0,2% leq 11 (
            start "" "C:\users\me\desktop\subject3.bat"
      )
    ) else (
    Exit
    )
    
    如果%time:~0,2%geq 8(
    如果%time:~0,2%leq 9(
    启动“”“C:\users\me\desktop\subject1.bat”
    )否则,如果%time:~0,2%leq 10(
    启动“”“C:\users\me\desktop\subject2.bat”
    )否则,如果%time:~0,2%leq 11(
    启动“”“C:\users\me\desktop\subject3.bat”
    )
    )否则(
    出口
    )
    

    您的第二个变体:平坦
    if
    /
    else
    块 另外,您的替代变体可能更简单;此外,标签后面不应跟着

    如果不是%time:~0,2%geq 8(
    出口
    )
    如果%time:~0,2%leq 9(
    启动“”“C:\users\me\desktop\subject1.bat”
    后藤:续
    )
    如果%time:~0,2%leq 10(
    启动“”“C:\users\me\desktop\subject2.bat”
    后藤:续
    )
    如果%time:~0,2%leq 11(
    启动“”“C:\users\me\desktop\subject3.bat”
    后藤:续
    )
    :续
    

    其他问题
  • 考虑使用
    exit/B
    而不是