Как сделать задержку в bat файле

Обновлено: 07.07.2024

Рассмотрим основные варианты организации ожидания ( паузы ) в bat / cmd файлах.

Для решения этой задачи в операционных системах, начиная с VISTA, присутствует команда timeout. Так, для ожидания 10 секунд следует выполнить команду.

Если не использовать параметр /NOBREAK, то ожидание может быть прервано нажатием любой клавиши.

Как и во многих других случаях, может помочь утилита nircmd.
(На момент написания страницы описание возможностей утилиты было здесь. C этим списком я рекомендую ознакомится, даже если для текущей задачи будет использовано другое решение.)

На просторах интернета можно найти утилиту wait.exe. Точнее, даже несколько разных, включая исходные тексты программы. Поэтому я не привожу здесь параметров вызова, смотрите их описание.

Для организации паузы можно использовать утилиты, ожидающих определенное событие заданное время.
При условии, что событие не наступит, получается ожидание требуемого интервала времени.
Так, паузу можно создать при помощи команды ping:

В том же пакете Ресурскит есть утилита choice, которую при известной доле извращенности можно использовать для тех же целей:

0,-3% :: пауза на 15 секунд call :sleep 15 :: Другие действия echo Сейчас %time:

0,-3% pause goto :EOF :sleep echo Пауза на %1 секунд. set /a ftime=100%time:

6,-3%%%100+%1 if %ftime% GEQ 60 set /a ftime-=60 :loop set ctime=%time:

6,-3% if /i %ftime% NEQ %ctime% goto :loop exit /b 0

Данная процедура позволит организовать задержку в выполнении. Время ожидания должно быть меньше 60 сек.

Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуется регистрация).

Установка и загрузка ОС Виндовс

Задержка времени (пауза, тайм-аут) в бат-файле

Вот, нашёл в Сети рабочий пример для устройства задержки времени
(пауза, тайм-аут) при выполнении команды в bat-файле:

echo wscript.Sleep 30000>"%temp%sleep30.vbs"
cscript //nologo "%temp%sleep30.vbs"
del "%temp%sleep30.vbs"

Работает в любой ОС Windows, аж бегом

Зачем нужна задержка (пауза, тайм-аут) при выполнении команды в bat-файле?

У всех – по-разному.
Лично мне она (пауза) понадобилась вот для чего:

– Взял простенький bat-файл для очистки временных папок и бросил его в АВТОЗАГРУЗКУ
Прикололся, типа – чтобы этот батничек чистил временные каталоги при запуске системы.
Текст батника вытащил из стандартного Total Commander-a:

cmd /c title Очистка временной папки &cd/d %temp%&rd/s/q %temp% 2>nul &cd/d %tmp%&rd/s/q %tmp% 2>nul &cd/d C:WindowsPrefetch &del *.pf 2>nul &cd/d C:WindowsTemp&rd/s/q c:windows emp 2>nul

Всё-бы ничего, да только такая процедура очистки временных папок при загрузке –
сносит полезные файлы и система выдаёт окно ошибки

Полный текст bat-файла стал теперь таким:

echo wscript.Sleep 30000>"%temp%sleep30.vbs"
cscript //nologo "%temp%sleep30.vbs"
del "%temp%sleep30.vbs"
cmd /c title Очистка временной папки &cd/d %temp%&rd/s/q %temp% 2>nul &cd/d %tmp%&rd/s/q %tmp% 2>nul &cd/d C:WindowsPrefetch &del *.pf 2>nul &cd/d C:WindowsTemp&rd/s/q c:windows emp 2>nul

Прим. Лошади понятно, что изменив цифру 30 на своё значение,
можно получить другие величины паузы в секундах в bat-файле.

Начиная с VISTA, в операционных системах семейства Windows присутствует команда TIMEOUT. Эта команда принимает значение таймаута, равного фиксированному периоду времени ожидания (в секундах) до выполнения команды или ожидание до нажатия клавиши. Имеется также параметр, зaдающий игнорирование нажатий клавиш.

Синтаксис
TIMEOUT [/T] 50 [/NOBREAK]

Параметры

/T 50 Таймаут = 50 сек. Время ожидания в секундах. Допустимый интервал: от -1 до 99999 секунд. Значение, равное -1 задает неограниченное время ожидания до нажатия клавиши. /NOBREAK Игнорировать нажатия клавиш, ждать указанное время. /? Отображение справки в командной строке.

TIMEOUT /?
TIMEOUT /T 10
TIMEOUT /T 300 /NOBREAK
TIMEOUT /T -1

Весь текст примера можно внести в bat-файл,
запустить и посмотреть, как это работает.
Впечатляет.

Когда-то, еще в DOS, для организации ожидания в командном файле использовалась удобная команда SLEEP, но затем она почему-то перекочевала из стандартного установочного набора Windows в дополнительный Resource Kit. Можно просто скопировать его оттуда в каталог system32 и использовать в ваших командных файлах.

Если же Resource Kit нет под рукой, можно воспользоваться ранее рассмотренной командой CHOISE без вывода текста и с автоматическим формированием ответа через nn секунд (1-99):

Поиск компьютеров с запущенным приложением

В заключение добавлю, что для того, чтобы этот скрипт работал, PSlist.exe и PSkill.exe должны быть доступны в путях поиска исполняемых файлов, например в каталоге WINDOWS. Пользователь, запускающий его, должен обладать правами администратора по отношению к сканируемым компьютерам. И, если текущий пользователь таковым не является, то в параметры запуска утилит PSlist.exe и PSkill.exe нужно добавить ключи, задающие имя пользователя и пароль.

Поиск компьютеров с запущенным приложением по списку

В предыдущем примере использовался прямой перебор IP-адресов компьютеров в локальной сети, что не всегда удобно, поскольку в процедуру опроса оказываются вовлечены и выключенные компьютеры. Решим задачу другим способом. Создадим текстовый файл со списком компьютеров и опросим их по этому списку.
Список можно получить из сетевого окружения с использованием команды:
net.exe view > comps.txt
После выполнения такой команды файл comps.txt будет содержать список следующего вида:

Обрабатывать содержимое этого текстового файла будем с помощью команды FOR с ключом /F:

FOR /F ["ключи"] %переменная IN (имя файла) DO команда [параметры]

Окончательный вид команды:

FOR /F "eol=К skip=4 tokens=1 " %%I IN (comps.txt) DO (
pslist.exe -u admin -p pass %%I %1
IF NOT ERRORLEVEL 1 net.exe send ADMINCOMP %%i %1
)

Не нашли то, что искали? Воспользуйтесь поиском:

Вот, нашёл в Сети рабочий пример для устройства задержки времени
(пауза, тайм-аут) при выполнении команды в bat-файле:

echo wscript.Sleep 30000>"%temp%\sleep30.vbs"
cscript //nologo "%temp%\sleep30.vbs"
del "%temp%\sleep30.vbs"

Работает в любой ОС Windows, аж бегом

Зачем нужна задержка (пауза, тайм-аут) при выполнении команды в bat-файле?

У всех – по-разному.
Лично мне она (пауза) понадобилась вот для чего:

– Взял простенький bat-файл для очистки временных папок и бросил его в АВТОЗАГРУЗКУ
Прикололся, типа – чтобы этот батничек чистил временные каталоги при запуске системы.
Текст батника вытащил из стандартного Total Commander-a:

cmd /c title Очистка временной папки &cd/d %temp%&rd/s/q %temp% 2>nul &cd/d %tmp%&rd/s/q %tmp% 2>nul &cd/d C:\Windows\Prefetch &del *.pf 2>nul &cd/d C:\Windows\Temp&rd/s/q c:\windows\temp 2>nul

Всё-бы ничего, да только такая процедура очистки временных папок при загрузке –
сносит полезные файлы и система выдаёт окно ошибки

Досадно.
Однако, устройство паузы в 30 сек. решило всю проблему.
И система грузится, и папки темпов - чистятся.

Полный текст bat-файла стал теперь таким:

echo wscript.Sleep 30000>"%temp%\sleep30.vbs"
cscript //nologo "%temp%\sleep30.vbs"
del "%temp%\sleep30.vbs"
cmd /c title Очистка временной папки &cd/d %temp%&rd/s/q %temp% 2>nul &cd/d %tmp%&rd/s/q %tmp% 2>nul &cd/d C:\Windows\Prefetch &del *.pf 2>nul &cd/d C:\Windows\Temp&rd/s/q c:\windows\temp 2>nul

Прим. Лошади понятно, что изменив цифру 30 на своё значение,
можно получить другие величины паузы в секундах в bat-файле.

Начиная с VISTA, в операционных системах семейства Windows присутствует команда TIMEOUT. Эта команда принимает значение таймаута, равного фиксированному периоду времени ожидания (в секундах) до выполнения команды или ожидание до нажатия клавиши. Имеется также параметр, зaдающий игнорирование нажатий клавиш.

Синтаксис
TIMEOUT [/T] 50 [/NOBREAK]

Параметры

/T 50 Таймаут = 50 сек. Время ожидания в секундах. Допустимый интервал: от -1 до 99999 секунд. Значение, равное -1 задает неограниченное время ожидания до нажатия клавиши. /NOBREAK Игнорировать нажатия клавиш, ждать указанное время. /? Отображение справки в командной строке.

TIMEOUT /?
TIMEOUT /T 10
TIMEOUT /T 300 /NOBREAK
TIMEOUT /T -1

Весь текст примера можно внести в bat-файл,
запустить и посмотреть, как это работает.
Впечатляет.

Приблизительная оценка времени выполнения файла AUTOEXEC.BAT
Здравствуйте! Подскажите, какой код написать в dose, что бы он приблизительно оценил время.

Перезапуск bat-файла через определённый промежуток времени
Здравствуйте . есть bat файл , он иногда подвисает и требуется его полная перезагрузка. Может быть.


Выполнение кода с отсрочкой по времени после запуска bat-файла
Имеется 2 файла bat: 1: chcp 1251 IF EXIST "%programfiles%\Jabber\Plugins\quicksearch.dll" GOTO.

Решение

Спасибо Уважаемый модератор FraidZZ за поддержку
вот что получилось после запуска bat файла с Вашим кодом
на кракозябры внимания не обращаю - с ними все решаемо
а задержка почему то не сработала
У Вас windows какой версии?. Буду дома, скину более рабочий код. Не знал, что у Вас нет msg

Уважаемый FraidZZ у меня windows 8 64 bit

Ну зачем сразу "Уважаемый") Обращайтесь просто "FraidZZ"
А то я смущаюсь :-[

не знаю. модератор по-моему - он всегда Уважаемый:)

Решение

FraidZZ, я глянул.
Приколись, в Windows 8.1. есть, а в Windows 8 нет.
При этом, когда они выпиливали msg.exe из 8, то забыли понерфить ее копию в WinSxS
Там внутри она и ее языковый файл помощи msg.exe.mui.

ujif, Вы можете найти эту программу, открыв папку c:\windows и в поисковой строке набрать msg.exe
Там будет 2 версий. Ту, что из папки WinSxS\. AMD64. скопируйте в c:\windows\System32
Ничего плохого для системы не будет.
Просто парни из Майкрософт решили немного пошутить поиграть в прятки.

Спасибо Уважаемый Dragokas за поддержку
как бы и нам подшутить над парнями из Майкрософт
и тоже бы куда чего от них спрятать

Добавлено через 1 час 2 минуты
сделал следующее ,убрал из кода | msg *
получилось

image

Другие статьи

image

Задержка времени (пауза, тайм-аут) в бат-файле

Начиная с VISTA, в операционных системах семейства Windows присутствует команда TIMEOUT. Эта команда принимает значение таймаута, равного фиксированному периоду времени ожидания (в секундах) до выполнения команды или ожидание до нажатия клавиши. Имеется также параметр, зaдающий игнорирование нажатий клавиш.

Синтаксис
TIMEOUT [/T] 50 [/NOBREAK]

Параметры:

/T 50 Таймаут = 50 сек. Время ожидания в секундах. Допустимый интервал: от -1 до 99999 секунд. Значение, равное -1 задает неограниченное время ожидания до нажатия клавиши. /NOBREAK Игнорировать нажатия клавиш, ждать указанное время. /? Отображение справки в командной строке.

TIMEOUT /?
TIMEOUT /T 10
TIMEOUT /T 300 /NOBREAK
TIMEOUT /T -1

blog

blog

blog

Обратная связь

У вас есть дополнения, пожелания, вопросы, замечания? Напишите нам и мы вам обязательно ответим!

image

Вячеслав Чермашенцев

Опыт работы с 1989 года. Начинал как программист, затем расширил горизонты в сторону системного администрирования. На счету более 100 удачно реализованных проектов.

Читайте также: