Недавно столкнулся с небольшим кейсом по автоматизации, если не вдаваясь в детали, то заказчик хочет чтобы один и тот же сценарный файл (BAT) выполнял разные действия в зависимости от того, в какой временной промежуток он запущен. Предположим, что временные интервалы у нас 21:00-9:00 (условно ночь) и 9:00-21:00 (условно день). Как известно, в bat-файлах оператора OR нет, но вместо этого можно сделать конструкцию из двух IF таким образом, что по результатам условий (которые просто можно перечислить построчно) мы присвоим булево значение некоему флагу, а потом, в зависимости от значения флага, перейдем через GOTO на разные секции и выполним разные действия.

@set Ntime=%time:~0,2%%time:~3,2%%time:~6,2%

@REM Здесь мы присваиваем Ntime определенное число,
@REM составленное из значений часа, минут, секунд

 

@if %Ntime% lss 90000 set isNight=true
@if %Ntime% gtr 210000 set isNight=true

 

@REM Если isNight был инициализирован, то

@if defined isNight (
GOTO NIGHT
) else (
GOTO DAY
)

 

:NIGHT
@color 0A
@echo Time interval is 21:00:00 — 08:59:59
@pause
@exit

 

:DAY
@color 0C
@echo Time interval is 09:00:00 — 20:59:59
@pause
@exit