是否有一种更简单,更合乎逻辑的方法来批量制作连续的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 - >开放主题1,小于10 - > subject2等但是代码在第二个 else 上没有用,所以我开始使用它主要是因为它有效:
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(也完成)来补偿丢失的时间并打开所需的软件和网站。
答案 0 :(得分:2)
if
/ else
块您的代码中缺少两个右括号(7×(
,5×)
)。
这是你的代码有一点不同的缩进:
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
)
你想要完成的是:
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
)
您也可以这样写:
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
)
if
/ else
块另外,您的替代变体可能更简单;此外,标签不应该跟(
:
if not %time:~0,2% geq 8 (
exit
)
if %time:~0,2% leq 9 (
start "" "C:\users\me\desktop\subject1.bat"
goto :cont
)
if %time:~0,2% leq 10 (
start "" "C:\users\me\desktop\subject2.bat"
goto :cont
)
if %time:~0,2% leq 11 (
start "" "C:\users\me\desktop\subject3.bat"
goto :cont
)
:cont
exit /B
而不是exit
,因为前者只是批处理批处理文件,而后者终止了基础命令提示符实例。start
(没有/WAIT
选项)不等到运行批处理文件完成;考虑改为使用call
命令。 %time%
变量可能包含填充零,例如08:30
,因此%time:~0,2%
扩展为08
而不是 SPACE 8
;带前导零的数字被视为八进制数,因此比较可能会失败;为了避免此类问题,您可以在if
/ else
阻止之前执行以下操作,并为其使用变量%hour%
而不是%time:~0,2%
:
set "hour=%time:~0,2%" & rem // (extract hour)
set "hour=1%hour: =0%" & rem // (prepend `1`, replace leading <kbd>SPACE</kbd> by `0`)
set /A "hour%%=100" & rem // (remove leading `1`, avoid leading `0` finally)
echo Hour value to be used further: %hour%
答案 1 :(得分:0)
下面的批处理代码回答了您的问题:“有更简单的方法吗?”
@echo off
setlocal EnableDelayedExpansion
rem Define the "subject" array with batch files for each hour
set "subject[9]=subject1.bat"
set "subject[10]=subject2.bat"
set "subject[11]=subject3.bat"
rem Get the array element corresponding to current hour
set /A hour=1%time:~0,2%-100
set "file=!subject[%hour%]!"
if defined file start "" "C:\users\me\desktop\%file%"
有关此解决方案的进一步说明,您必须了解数组是什么,因此建议您先阅读this introduction,然后阅读Wikipedia article,最后阅读{{3批处理文件中的数组管理。