如何修复此批处理时间脚本?

时间:2016-12-17 23:00:12

标签: batch-file windows-10

我正在开发一个小批处理程序,我在编写时间脚本编码方面遇到了问题,我的意思是在一定时间内允许程序中的人员。 一定时间是在下午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。

2 个答案:

答案 0 :(得分:1)

if %current_time% lss "12:00" if %current_time% gtr "23:00" goto :STOP

current_time可能是例如。 12:5712: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