我正在开发一个小批处理程序,我在编写时间脚本编码方面遇到了问题,我的意思是在一定时间内允许程序中的人员。 一定时间是在下午12点开放,并在下午11点关闭。 到目前为止,这是我的脚本:
@echo off
set current_time=%time:~0,5%
rem This piece of code below is to make it start
if %current_time% == "12:00" goto :START
rem this piece of code below is to make it stop
if %current_time% == "23:00" goto :STOP
rem and if you know batch you'll get these two
if %current_time% lss "12:00" if %current_time% gtr "23:00" goto :STOP
if %current_time% gtr "12:00" if %current_time% lss "23:00" goto :START
:START
echo The program has successfully ran.
echo Press anything to exit now.
pause >nul
exit
:STOP
echo Sorry, but this program is closed. Come back at 12:00 P.M.
pause >nul
exit
当我尝试代码时,它只是完全忽略了时间配置并直接进入启动过程。有人知道如何解决这个问题吗? 此外,请注意:我使用的是Windows 10。
答案 0 :(得分:1)
if %current_time% lss "12:00" if %current_time% gtr "23:00" goto :STOP
current_time
可能是例如。 12:57
。 12:57
和"12:57"
完全不同。无论您将变量与引用值进行比较,都需要引用变量
if "%current_time%" lss "12:00" if "%current_time%" gtr "23:00" goto :STOP
但是,这将纠正比较,此代码执行"和"功能,所以你要问"时间< 12:00"和"时间> 23:00"这永远不会成真。您的下一个语句可能成为现实,但由于此语句永远不会成立,批处理将只是跳到下一个语句。它忽略了标签 - 它们只是位置标记。
答案 1 :(得分:1)
正如我所提到的,你可以使用超时延迟,但也有 Choice - 一个以错误级别响应的一键输入 这可以让你在推迟时中止。
正如aacini在他的评论中阐述的那样,变量只存储字符串 Set / A和If如果可能,尝试转换为整数。
永远记住的一件事是前导零的数字 被视为以八进制编码(0x为十六进制)。这很重要 处理日期/时间部分月份天数小时秒。
以下是堆叠if else构造的示例
@echo off
:loop
Set Now=%time:~0,2%%time:~3,2%
If "%Now:~0,1%" equ "0" Set Now=%Now:~1%"
cls&Echo %Time:~0,8% Now=%Now%
if %Now% geq 1200 (
if %Now% leq 2300 (
goto :START
) Else (
goto :Stop
)
) Else (
Goto :Stop
)
Rem Could never reach here
:START
echo The program has successfully ran.
echo Press anything to exit now.
pause >nul
exit
:STOP
echo Sorry, but this program is closed. Come back at 12:00 P.M.
echo To abort, hit A
Choice /T 2 /C AN /M "Abort [A/N] " /D N >NUL
If %ErrorLevel% == 1 exit /B
Goto :loop