Установить переменную пакетного файла, если время находится в указанном периоде

Я создал командный файл, который регулярно запускается из автоматического задания.

В пакетном файле я хочу проверить, находится ли время между 12:00 и 8:00, установить переменную с определенным значением, в противном случае установить ее по умолчанию.

Любые советы, как я могу сделать это в командном файле?

2 ответа

Решение
for /f "delims=:." %%T in ("%time%") do if %%T lss 08 (set var=someValue) else (set var=default)

Отредактируйте - zb226 правильно - вышеприведенное сложнее, чем нужно. Гораздо проще сделать

if %time:~0,2% lss 08 (set var=someValue) else (set var=default)

Ведущий 0 в 08 является критическим. Причина в том, что числа, начинающиеся с 0, рассматриваются как восьмеричные обозначения, а 8 и 9 не являются действительными восьмеричными цифрами. Оператор IF выполнит сравнение строк, если с обеих сторон увидит недопустимое восьмеричное число. Так что если текущий час 09, то 09 lss 8 TRUE, потому что 0 сортирует до 8. Изменение на 09 lss 08 дает правильный ответ.

Любое из приведенных выше решений устанавливает значение по умолчанию, если оно точно 8:00:00:00. Если вы действительно хотите, чтобы "конкретное значение" было до 8: 00: 00:00 утра, а по умолчанию в любое время, то это немного сложнее. В этом случае я бы вернулся к решению FOR.

for /f "tokens=1-4 delims=:." %%A in ("%time%") do (
  set var=default
  if %%A lss 08 set var=someValue
  if %%A%%B%%C%%D equ 08000000 set var=someValue
)

Я вижу, что на это уже дан ответ, но решение кажется мне излишне сложным. Кроме того, некоторые дополнительные объяснения могут пригодиться, чтобы понять решение.

Вы можете получить доступ к текущему времени в пакетном файле, используя %TIME%:

C:\>echo %TIME%
18:01:52,64

Вы можете использовать следующий синтаксис для доступа к подстроке %TIME% (или любая другая переменная, в этом отношении):

C:\>echo %TIME:~0,2%
18

Поэтому, чтобы условно установить переменную, как вы описали, вы должны сделать:

IF %TIME:~0,2% LSS 08 ( SET VAR=particularValue ) ELSE ( SET VAR=defaultValue )

Изменить: Исправленное решение с помощью @dbenham - посмотрите его ответ и комментарий, чтобы увидеть, что было не так с моей первоначальной попыткой.

Другие вопросы по тегам