Установить переменную пакетного файла, если время находится в указанном периоде
Я создал командный файл, который регулярно запускается из автоматического задания.
В пакетном файле я хочу проверить, находится ли время между 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 - посмотрите его ответ и комментарий, чтобы увидеть, что было не так с моей первоначальной попыткой.