Как зациклить выполнение команды в bat-файле?

  • 25.01.2020
  • 24 526
  • 4
  • 05.02.2021
  • 52
  • 52
  • 0
Как зациклить выполнение команды в bat-файле?

Описание

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

Инструкция

Цикл организуется следующим образом:

:loop
... <- здесь команда для создания паузы
... <- здесь другие команды, которые необходимо выполнять в цикле
goto loop

Паузу можно создать несколькими способами. В операционных системах Windows Vista, и более новых, для этого существует команда timeout:

timeout /t 5

где параметр /t - это время ожидания в секундах.


Другая команда, которую можно использовать для данной цели (например, в Windows XP, в которой еще не присутствовала команда timeout), это команда ping:

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

Кроме этого, существует утилита sleep, которая выполняет те же функции, что и команда timeout. Данная утилита не входит в стандартный состав ни одной операционной системы Windows, и устанавливается из дополнительного пакета программного обеспечения "Windows Server 2003 Resource Kit Tools" на любую операционную систему Windows. Скачать данный пакет можно с сайта Microsoft, или нашего зеркала на Яндекс.Диск.

Использование программы sleep очень простое:

sleep 5

где цифра 5 обозначает время ожидания в 5 секунд.

Была ли эта статья Вам полезна?

Комментарии к статье (4)

    • lp85d

    Вот такой скрипт написал на тот случай если я поменяю на удалённой машине настройки адаптера и они будут вести к обрыву сети и у меня не будет доступа к удалённой машине то скрипт сам починит мою поломку

    :loop
    timeout /t 60
    @echo off
    ping 1.1.1.1
    if %errorlevel%==0 (
    echo conect
    ) else (
    netsh interface ip set address "Беспроводное сетевое соединение" static 192.168.0.101 255.255.255.0 192.168.0.1 1
    netsh interface ip set dns "Беспроводное сетевое соединение" static 100.126.255.254 primary
    netsh interface ip add dns "Беспроводное сетевое соединение" 100.126.255.253 index=2
        timeout 60
    )
    goto loop
    • Олег

    А как сделать чтоб цикл повторялся определенное число раз ???
    Вот цикл и его надо повторит только 8 раз: -
    :loop
    ... <- здесь команда для создания паузы
    ... <- здесь другие команды, которые необходимо выполнять в цикле
    goto loop

      • Recluse

      Способов несколько, прочитать про них можно в этой статье.

      • Абубачир

      можно объявить переменную, значение которой будет увеличиваться на 1 после каждого выполнения функций внутри цикла, а перед выполнением цикла выполнять проверку, является ли значение переменной больше 8

Добавить комментарий для Recluse

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Напоминаем Вам, что Ваше сообщение будет опубликовано только после проверки администратором сайта. Обычно это занимает 1-2 рабочих дня.