Batch file 如何使if-else语句成批连续工作?
有没有一种比我现在使用的方法更简单、更符合逻辑的方法来批量生成连续的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 %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
,因为前者只是退出批处理文件,而后者则终止底层命令提示符实例%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
而不是