Команда ожидания Windows до системного времени

Я недавно сделал пакетный скрипт для резервного копирования. Где-то в середине сценария мне нужно будет подождать некоторое время, чтобы достичь следующей строки сценария. Я запланировал сценарий на 4:00 вечера, и после команды ожидания следующая строка должна начинаться ровно в 5:30 вечера. Я думал об использовании SLEEP команда, но она не уверена, что команды, использованные перед командой ожидания, завершатся в определенное время (из-за несовместимых размеров файлов), но она уверена, что они будут выполнены к 5:00 или 5:10, и затем она должна выполнить команду ожидания, которая ждет определенных системных часов. Я проверяю, есть ли какая-либо команда, которая ждет или спит, пока указанное время не достигнет системного времени и не возобновится там после. Кто-нибудь сталкивался с этой ситуацией, и как это было решено?

4 ответа

Решение

Вероятно, не лучший способ сделать это, но здесь идет:

:loop
if %TIME% LSS 17:30:00.00 goto loop
echo Continuing at %TIME%

Вы используете два тега, WinXP и Server-2008-R2, поэтому я не уверен, в какой среде вы работаете.

В обеих средах есть команда schtasks это позволяет настраивать запланированные задачи из командной строки, хотя возможности этого инструмента зависят от платформы. Это позволит вам настроить одноразовую задачу, которая будет вызывать остаток вашего скрипта. Он должен быть в отдельном файле, но он будет выполнен один раз в 5:30 вечера.

Синтаксис XP: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/schtasks.mspx

Сервер-2008 Синтаксис: http://technet.microsoft.com/en-us/library/cc725744%28WS.10%29.aspx

Принятый ответ — полезное начало, но есть несколько проблем:

  • %TIME%имеет ведущий пробел вместо ведущего нуля перед10:00(например 9:30). Это приведет к таким сравнениям, какif 9:30 LSS 10:00что будет ложным, потому что9>1.
    Простой обходной путь — использовать%TIME: =0%.

  • Без каких-либо задержек цикл может потреблять много ресурсов ЦП. Таким образом, мы можем использоватьtimeoutпоспать секунду между проверками.

Вот пакетный файл,wait-until.cmdэто устраняет проблемы.

      @echo off

:loop
 %SYSTEMROOT%\System32\timeout.exe 1 > nul
IF %TIME: =0% LSS %1 GOTO loop

Вы можете вызвать это, например,wait-until 09:30.

Поскольку здесь используется сравнение строк, вы можете опустить конечный результат.0ценности вашего времени. Так, например,09:30:00.00можно свести к09:30(или даже09:3).

Я не знаю ни одной команды, чтобы ждать определенное время, но вы могли бы найти некоторые Googling для этого. Мы решаем аналогичные проблемы, разбивая пакетные файлы на отдельные части и планируя их индивидуально.

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