Windows批处理脚本中的时间比较

时间:2019-02-11 13:59:53

标签: batch-file

我在Windows批处理中运行此脚本

set currentTime=%TIME%

if %currentTime% lss 09:00 echo "Before 09:00"

我得到

  

此时60是出乎意料的。

如果我删除第二个%,我的脚本将运行,但错误地返回“ 09:00之前” 不管我什么时候比较。 (我认为它将09:00与文字%currentTime进行比较)。

任何人都可以帮助您正确地比较时间吗?

3 个答案:

答案 0 :(得分:3)

这是在cmd.exe shell .bat文件脚本中执行此操作的简便方法。

FOR /F "delims=" %%a IN ('powershell -NoL -NoP -Command "(Get-Date).Hour"') DO (SET /A "HOUR=%%a")
IF %HOUR% LSS 9 (
    ECHO "Before 09:00"
)

答案 1 :(得分:1)

要使用纯蝙蝠来执行此操作,您需要使用 EnableDelayedExpansion 并在时间设置中使用子字符串,并且如果时间布局是否使用AM / PM,则需要使用时间设置 leq gtr 中的 %_bit_compare% 来解析该过程,或者...

  

另一件事是,我有限的英语不能帮助我很好地向您解释,抱歉:。

@echo off & setlocal EnableDelayedExpansion
set "currentTime=!TIME::=!" & set "currentTime=!currentTime:,=!" & set "conpareTime=900"
(set "_bit_compare=leq" & time /t | findstr /l "AM PM" || set "_bit_compare=gtr" )>nul
if "!currentTime:~0,4=!" %_bit_compare% "!conpareTime!" (echo/ !time:~0,5! Before 09:00) else (echo/ !time:~0,5! After 09:00)
  

或者,相同代码以非紧凑形式:   

@echo off & setlocal EnableDelayedExpansion

set "currentTime=!TIME::=!" 
set "currentTime=!currentTime:,=!"
set "_bit_compare=leq"
set "conpareTime=900"

(time /t | findstr /l "AM PM" || set "_bit_compare=gtr")>nul

if "!currentTime:~0,4=!" %_bit_compare% "!conpareTime!" (

    echo/ !time:~0,5! Before 09:00

    ) else (

    echo/ !time:~0,5! After 09:00

    )

答案 2 :(得分:1)

您也可以按照以下步骤进行操作:

@echo off
setlocal EnableDelayedExpansion

rem Set time to compare to 09:00:00:
set "time_to_compare=090000"

:loop
for /F "skip=1 delims=." %%A IN ('wmic OS get localdatetime') do (
    for /F "delims=" %%B IN ("%%A") do (
        set "_time=%%B"
        if !_time:~-6! GEQ 090000 (call :after) else (call :before)
    )
)

:after
echo It is after 09:00:00^^!
pause>nul
exit /b 0

:before
echo It is before 09:00:00^^!
pause>nul
exit /b 0

我不知道你想做什么。因此,如果在此之后,它将 call -而不是 goto -:after子例程;如果在此之前,它将{{1 }} call

您可以进行任何其他更改。

注意:时间将以24小时制和:before格式生成;如果您是将HH:mm:ss更改为21:00:00 。发生这种情况的方式是防止行为不端。该解决方案按要求以纯批处理方式编写。