bat задержка между командами

Содержание

  1. среда, 5 октября 2011 г.
  2. Задержка (delay или sleep) в секундах в BAT файлах Windows
  3. 4 комментария:
  4. Использование PAUSE

среда, 5 октября 2011 г.

Задержка (delay или sleep) в секундах в BAT файлах Windows

Начиная с Windows Vista, есть встроенная команда timeout:

Для Windows XP и более ранних версий Windows можно воспользоваться командой ping:
Основная идея состоит в том, что пакеты ping отправляются примерно раз в секунду. Задавая разное количество пакетов, мы получаем разную задержку.

4 комментария:

Уточните с какой версии винды она появилась.
а то пользователи могут начать писать не портабельные батники.

Windows 7 работает
Windows XP нет

Команда TIMEOUT появилась в Windows Vista.
!! так же учтите. что при проблемах в сети (например отсутствие подключенного кабеля) ping выполнится быстрее, т.к. будут ошибки

Про Windows Vista поправил. Спасибо! По идее адрес закольцованного адаптера 127.0.0.1 доступен почти всегда, поэтому даже когда сеть отключена на других адаптерах, это не должно сказываться.

  • Главная
  • ТЕХНИЧЕСКАЯ
  • BAT
  • Использование PAUSE

Использование PAUSE

  • размер шрифта уменьшить размер шрифтаувеличить размер шрифта
  • Печать
  • Эл. почта

Pause позволяет остановить выполнение Bat-файла до нажатия клавиши на клавиатуре. Это может быть полезно, например, если Вы хотите, чтобы пользователь подтвердил выполнение какого-то действия нажатием на клавишу. То есть, что он в своем уме и осознает, что происходит.

Смотрим пример, который копирует файл на дискету.

В момент выполнения программа остановится.

А после нажатия скопируется. Но на экране останется окно.

Если Вы не хотите чтобы оно было, вызовите последней командой cls

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

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

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

Поскольку эта задача вставала перед разработчиками задолго до появления этой утилиты, те, у которых операционная система младше, могут воспользоваться накопившемся опытом.
Для организации паузы есть специальная утилита, входящая в состав Resource Kit (Ресурскита).
Пакеты Microsoft Windows Deployment Kit и Windows Resource Kit бесплатно распространяется microsoft.com. Этот пакет содержит ряд полезных и. как бы так сказать. других утилит.

Если вы уже устали бродить по бескрайним просторам сайта microsoft.com, постоянно возвращаясь на одни и те же страницы, то можете скачать эту утилиту здесь

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

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

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

-n 1 — выполнить один запрос
-w 100000 — ждать ответа 100 секунд
(значение указывается в миллисекундах)
10.10.254.254 — IP адрес, который заведомо не существует в локальной сети (важно!), следовательно, никогда не ответит на ping т. е. событие не наступит.
>nul — перенаправление всего вывода команды ping в никуда.

Еще одно решение — посылать пинг на заведомо существующий адрес — т. е. самому себе. Количество посылаемых пакетов должно быть на единицу больше количества ожидаемых секунд. Так, для ожидания 5 секунд следует выполнить команду:

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

Для любителей экзотики.
Можно вычислить время окончания интервала ожидания и занять чем-то несчастный процессор до наступления этого события. Как результат — пауза организована только средствами bat / cmd.
Привожу слегка исправленный пример, взятый с сайта http://www.oszone.net.

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 сек.

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

Источник: computermaker.info

Понравилась статья? Поделиться с друзьями:
Ок! Компьютер
Добавить комментарий