Можно достичь точности в несколько миллисекунд, в зависимости от скорости вашей машины.
Я только что закончил создание такого пакета, и хотя я не буду делиться с вами настоящим кодом, я дам вам несколько советов:
Используйте переменную% time% и делитесь на подстроки (без ":" и ".") - одна подстрока будет получать секунды, другая - минуты (вы можете добавить часы, для задержек более часа и даже включить дату)
Используйте set / A, чтобы преобразовать переменные времени в 1 целое число, представляющее количество секунд, прошедших с округленного часа (X: 00: 00.00). Добавьте к этому введенную задержку (в секундах).
Создайте короткий цикл, сравнивая значение объединенной переменной (объяснено в разделе 2) с текущим временем (необходимо пересчитать текущее объединенное значение min + sec, внутри этого цикла) и выходя из цикла, когда совпадение верно.
Здесь одно серьезное исправление - вам нужно будет обрезать любые предшествующие нули до переменных, которые собираются вычисляться с помощью команды "set / A". Я заметил, что оценщик консоли (для этой команды) возвращает ошибку, когда используется целое число с предшествующим 08 или 09 (или просто 08 или 09).
Примечание:
Это будет работать только с включенными расширениями команд. Чтобы проверить это, используйте следующее в начале процедуры:
verify other 2>nul
setlocal enableextensions
if errorlevel 1 goto err
А затем добавьте подпрограмму обработчика ошибок с именем "err".
Если вы хотите продолжить пакет в том же файле, используйте «endlocal» после подпрограммы зацикливания.
Кстати, это относится ТОЛЬКО к Windows XP с пакетом обновления 2 или 3.