Пакетный скрипт для проверки времени - PullRequest
1 голос
/ 06 февраля 2020

Можно ли проверить, находится ли время между двумя диапазонами, и затем выполнить действие на его основе.

Например: я хочу выполнить действие, только если текущее время не между 23:00 и 6:00

Вот то, что у меня есть, но я не могу прикрепить промежуточную часть.

set "currentTime=!TIME::=!" 
set "currentTime=!currentTime:,=!"
set "_bit_compare=leq"
set "compareTime=2300"
set "compareTime1=600"

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

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

    do somethinf

)

Ответы [ 3 ]

2 голосов
/ 06 февраля 2020

И просто для обоснования моего комментария, используя , () , из :

<!-- :
@"%__AppDir__%cscript.exe" //NoLogo "%~f0?.wsf"
@If ErrorLevel 1 Exit /B
@Rem Your Commands go below here
@Echo Within range
@Pause
@Rem Your commands end above here
@Exit /B
-->
<Job><Script Language="VBScript">
        If Hour(Now())<=22 AND Hour(Now())>=6 Then
            WScript.Quit(0 Mod 255)
        Else
            WScript.Quit(1 Mod 255)
        End If
</Script></Job>

Я использовал Rem arks, чтобы показать вам, куда вы помещаете свою команду или команды, и предоставил две строки для демонстрационных целей, (которые вы можете удалить после проверки) .

1 голос
/ 06 февраля 2020

Это еще несколько строк, чтобы сделать это в пакетном файле, но вы, по сути, хотите получить время в стандартном формате. Вы можете сделать это, вызвав WMI C. Я просто использую час для сравнения. Я не видел необходимости использовать минуты на основе предоставленного примера, говорящего, что оно не между 23:00 и 18:00. Я использую 1 для префикса сравнения начальных нулей в часе.

@echo off

set "compareTime1=23"
set "compareTime2=06"

REM GET DATE and TIME
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
SET "YYYY=%dt:~0,4%"
SET "YY=%dt:~2,2%"
SET "MM=%dt:~4,2%"
SET "DD=%dt:~6,2%"
SET "HH=%dt:~8,2%"
SET "min=%dt:~10,2%"
SET "sec=%dt:~12,2%"

IF 1%HH% LSS 1%compareTime1% IF 1%HH% GTR 1%compareTime2% (
    ECHO LETS DO SOMETHING
)
0 голосов
/ 06 февраля 2020

Это относительно легко написать с помощью PowerShell. Если вы используете поддерживаемую систему Windows, PowerShell будет доступен. Это также устраняет множество проблем с региональными вариациями в cmd.exe.

$h = [int](Get-Date -Format "HH")
if ($h -le 8 -or $h -ge 23) { & notepad.exe }"

Чтобы использовать его в скрипте .bat, вы можете:

powershell -NoLogo -NoProfile -Command ^
    "$h = [int](Get-Date -Format "HH");" ^
    "if ($h -le 8 -or $h -ge 23) { & notepad.exe }"
...