Пакетный файл, который отменяет действие, если текущая дата не находится между определенными датами - PullRequest
0 голосов
/ 27 мая 2019

Мне нужен оператор if else, который прерывает или продолжает пакетные сценарии.

если текущая дата находится между указанными 2 датами, она продолжает работать если нет, пакетный файл прерывается

например, я устанавливаю даты с 01.01.2019 по 01.03.2019, если дата 15.02.2019, пакетный файл работает, если 01.04.2019 он прерывает

самые близкие ответы отсюда; В пакетном файле как я могу проверить, что текущая дата наступила после установленной даты?

@ECHO OFF

SET FirstDate=2015-01-24

REM These indexes assume %DATE% is in format:
REM   Abr MM/DD/YYYY - ex. Sun 01/25/2015
SET TodayYear=%DATE:~10,4%
SET TodayMonth=%DATE:~4,2%
SET TodayDay=%DATE:~7,2%

REM Construct today's date to be in the same format as the FirstDate.
REM Since the format is a comparable string, it will evaluate date orders.
IF %TodayYear%-%TodayMonth%-%TodayDay% GTR %FirstDate% (
    ECHO Today is after the first date.
) ELSE (
    ECHO Today is on or before the first date.
)


and / or

@ECHO OFF
SETLOCAL ENABLEEXTENSIONS

REM -- 2 digit day
SET "_day=%DATE:~-10,2%" & REM day goes first (dd/mm/yyyy); if not, remove this line
SET "_day=%DATE:~-7,2%" & REM day goes second (mm/dd/yyyy); if not, remove this line
REM -- 2 digit month
SET "_month=%DATE:~-10,2%" & REM month goes first (mm/dd/yyyy); if not, remove this line
SET "_month=%DATE:~-7,2%" & REM month goes second (dd/mm/yyyy); if not, remove this line
REM -- 4 digit year
SET "_year=%DATE:~-10,4%" & REM year goes first (yyyy/##/##); if not, remove this line
SET "_year=%DATE:~-4%" & REM year goes last (##/##/yyyy); if not, remove this line

REM -- The variables below are set to year-month-day without separators (yyyymmdd)
SET "today=%_year%%_month%%_day%" & REM today's date based on your selections above
SET "compareDate=20180727" & REM the date you are comparing with today

REM -- Here's where the magic happens with comparing the two dates
IF %compareDate% LSS %today% ECHO The comparison date is in the past.
IF %compareDate% EQU %today% ECHO The comparison date is today.
IF %compareDate% GTR %today% ECHO The comparison date is in the future.
GOTO :EOF

1 Ответ

1 голос
/ 31 мая 2019

Проблема с %DATE% состоит в том, что она возвращает текущую дату, используя краткий формат даты , который полностью (бесконечно) настраивается.Один пользователь может настроить свою систему так, чтобы она возвращала Fri053119, а другой пользователь может выбрать 31/05/2019, что является полным кошмаром для программиста на BAT.

Одним из возможных решений является использование WMIC интерфейс командной строки для WMI.См. Инструментарий управления Windows в Википедии .

wmic OS Get localdatetime возвращает дату в удобном формате, чтобы непосредственно проанализировать ее с помощью команды FOR.

Так, например,Вы можете

for /f "delims=" %%a in ('wmic OS Get localdatetime  ^| find "."') do set wldt=%%a
set today=%wldt:~0,8%

получить текущую дату в удобном формате, чтобы использовать ее для сравнения дат

, чтобы позже вы могли

if %today% gtr 20190101 (
  if %today% lss 20190630 (
    echo Yes!
  )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...