Сравнение времени в пакетном скрипте Windows - PullRequest
0 голосов
/ 11 февраля 2019

Я запускаю этот скрипт в пакете Windows

set currentTime=%TIME%

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

и получаю

60 в это время было неожиданно.

Если удалитьвторой% мой скрипт выполняется, но он неправильно возвращает «До 09:00» независимо от того, в какое время я сравниваю.(Я думаю, что он сравнивает 09:00 с буквальным% currentTime).

Кто-нибудь может помочь, как правильно сравнить время?

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

Чтобы использовать для этого чистую летучую мышь, вам нужно использовать 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

    )
0 голосов
/ 11 февраля 2019

Вы также можете сделать это следующим образом:

@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 подпрограмма и если раньше, это будет call :before.

Вы можете вносить любые другие изменения.

Примечание. Время будет сгенерировано в 24-часовом формате HH:mm:ss;если вы имели в виду 21:00:00 измените set "time_to_compare=090000" на set "time_to_compare=210000".То, как это произошло, заключается в предотвращении неправильного поведения.Решение написано в чистом виде в соответствии с просьбой.

0 голосов
/ 11 февраля 2019

Вот простой способ сделать это в cmd.exe сценарии .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"
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...