1. Администрация SafeZone приветствует вас на нашем форуме!
    Если вы больше не желаете видеть рекламу при просмотре тем и сообщений - то достаточно просто зарегистрироваться. Для зарегистрированных пользователей реклама не отображается.
    Если у вас возникли проблемы с регистрацией на форуме - то вы можете сообщить об этом с помощью этой формы без авторизации,администрация форума обязательно отреагирует на вашу проблему.
    Скрыть объявление

Помощь в написании cmd-файла для проверки пинга на сайты

Тема в разделе "Пакетные файлы CMD, BAT", создана пользователем orderman, 15 мар 2017.

  1. orderman
    Оффлайн

    orderman Активный пользователь

    Сообщения:
    1.164
    Симпатии:
    1.397
    Баллы:
    433
    Здравствуйте.
    Нужна Ваша помощь. Необходимо написать пакетный файл, который:
    - от имени текущего пользователя запускал команды:
    1)
    Код (DOS):
    ping -n 100 8.8.8.8
    2)
    Код (DOS):
    ping -n 100 speedtest.net
    3)
    Код (DOS):
    ping -n 100 speedtest.ukrtelecom.ua
    - результат каждой команды выводился в соответствующий текстовый файл (расположение Рабочий Стол);
    - командный файл необходимо выполнить несколько раз (3-5) через определенный период времени 30 мин - 1 час;
    - проверяется условие наличия текстового файла (при отсутствии - файл создается, если есть результат дописывается в конец файла) - необязательно.

    Желательно;
    - чтобы перед результатом вывода команды в файл добавлялись текущие дата и время;
    - команды выполнялись одновременно;
    - окно выполнения команд желательно спрятать, чтобы не мешать пользователю;
    - по окончанию выполнения вывести окно с сообщением об окончании работы.
    ОС будет Win7-10.
    Спасибо!
     
  2. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.977
    Симпатии:
    4.855
    Баллы:
    338
    Через каждый час выводить на экран окно? Не надоест?
    --- Объединённое сообщение, 15 мар 2017 ---
    по окончанию чего - всего задания или каждого из трёх?
    Или когда все 5 раз отработает?
    --- Объединённое сообщение, 15 мар 2017 ---
    Примерно так:

    качаете NirCmd by Nir Sofer.

    Ложите рядом с батником NirCmd.exe. Батник такой:

    Код (DOS):
    @echo off

    :: интервал повтора в минутах

    set interval=30

    :: кол-во повторов

    set times=5

    :: кол-во отправляемых пакетов

    set pockets=100

    :: расположение логов

    set "p1_log=%UserProfile%\Desktop\ping_8888.log"
    set "p2_log=%UserProfile%\Desktop\ping_speedtest.log"
    set "p3_log=%UserProfile%\Desktop\ping_speedtest_ukr.log"

    set /a interval*=60

    :begin

    set /a ctimes+=1
    set t=%date% - %time%

    >> "%p1_log%" echo.
    >> "%p2_log%" echo.
    >> "%p3_log%" echo.
    >> "%p1_log%" echo %t%
    >> "%p2_log%" echo %t%
    >> "%p3_log%" echo %t%

    nircmd exec hide cmd.exe /c ">> "%p1_log%" ping -n %pockets% 8.8.8.8"
    nircmd exec hide cmd.exe /c ">> "%p2_log%" ping -n %pockets% speedtest.net"
    nircmd exec hide cmd.exe /c ">> "%p3_log%" ping -n %pockets% speedtest.ukrtelecom.ua"

    if %ctimes%==%times% exit /b
    timeout /T %interval%
    goto begin
    Создаёте ярлык к NirCmd.exe, заходите в свойства ярлыка, в поле объект дописываете:
    Код (Text):
    exec hide trace.cmd
    trace.cmd - имя батника.

    tr.

    Заходите в свойства NirCmd.exe, жмёте "Разблокировать".
    Запускаете задание с ярлыка.

    Чтобы досрочно убить задание:
    Код (DOS):

    taskkill /im ping.exe
    taskkill /im cmd.exe
     
     
    Последнее редактирование: 15 мар 2017
    fseto, Kиpилл и orderman нравится это.
  3. orderman
    Оффлайн

    orderman Активный пользователь

    Сообщения:
    1.164
    Симпатии:
    1.397
    Баллы:
    433
    Спасибо.
    Сообщение должно появиться 1 раз после выполнения полностью всего задания.
     
  4. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.977
    Симпатии:
    4.855
    Баллы:
    338
    С этим сложнее.
    Необходимо запустить ещё 4-ый процесс, который будет следить за PID-ами.
    Итого:

    Основной батник:
    Код (DOS):

    @echo off
    SetLocal EnableExtensions

    :: интервал повтора в минутах

    set interval=1

    :: кол-во повторов

    set times=5

    :: кол-во отправляемых пакетов

    set pockets=100

    :: расположение логов

    set "p1_log=%UserProfile%\Desktop\ping_8888.log"
    set "p2_log=%UserProfile%\Desktop\ping_speedtest.log"
    set "p3_log=%UserProfile%\Desktop\ping_speedtest_urk.log"

    set /a interval*=60

    :begin

    set /a ctimes+=1
    set t=%date% - %time%

    >> "%p1_log%" echo.
    >> "%p2_log%" echo.
    >> "%p3_log%" echo.
    >> "%p1_log%" echo %t%
    >> "%p2_log%" echo %t%
    >> "%p3_log%" echo %t%

    :: создание 1-го снимка запущенных процессов ping.exe

    set "lst="
    set "lst2="
    for /f "tokens=2 delims=," %%a in ('tasklist /fo csv /nh /fi "IMAGENAME eq ping.exe" ^| find /i "ping.exe"') do call :addPID "%%~a"

    nircmd exec hide cmd.exe /c ">> "%p1_log%" ping -n %pockets% 8.8.8.8"
    nircmd exec hide cmd.exe /c ">> "%p2_log%" ping -n %pockets% speedtest.net"
    nircmd exec hide cmd.exe /c ">> "%p3_log%" ping -n %pockets% speedtest.ukrtelecom.ua"

    timeout /T 3 >NUL

    :: создание 2-го снимка запущенных процессов ping.exe и сравнение с первым, разницу сохранить в lst2

    for /f "tokens=2 delims=," %%a in ('tasklist /fo csv /nh /fi "IMAGENAME eq ping.exe" ^| find /i "ping.exe"') do (
      set "found="
      for %%b in (%lst%) do if "%%~a"=="%%b" set found=true
      if not defined found call :addPID2 "%%~a"
    )

    ::запуск отслеживания завершения всех процессов из списка lst2

    nircmd exec hide cmd.exe /c Awaiting.cmd %lst2%

    if %ctimes%==%times% exit /b
    timeout /T %interval%
    goto begin

    :addPID
      set lst=%lst% %~1
    exit /b
    :addPID2
      set lst2=%lst2% %~1
    exit /b
     
    Вспомогательный Awaiting.cmd
    Код (DOS):

    @echo off
    SetLocal EnableExtensions

    :begin
    set "found="
    for /f "tokens=2 delims=," %%a in ('tasklist /fo csv /nh /fi "IMAGENAME eq ping.exe" ^| find /i "ping.exe"') do (
      for %%b in (%*) do if "%%~a"=="%%b" set found=true
    )
    if not defined found (
      nircmd infobox "Пинг завершён." "trace"
      exit /b
    )
    timeout /T 3 >NUL
    goto begin
     
     

    Вложения:

    • trace.zip
      Размер файла:
      83,6 КБ
      Просмотров:
      2
    orderman, Phoenix и Kиpилл нравится это.
  5. orderman
    Оффлайн

    orderman Активный пользователь

    Сообщения:
    1.164
    Симпатии:
    1.397
    Баллы:
    433
    Dragokas, немного не то. Я, наверное, не совсем правильно объяснил. Сообщение должно быть только одно, после выполнения всех повторов, т.е. после завершения последнего цикла.
     
  6. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.977
    Симпатии:
    4.855
    Баллы:
    338
    Ну тогда в первом варианте батника замените
    Код (DOS):

    if %ctimes%==%times% exit /b
     
    на
    Код (DOS):

    if %ctimes%==%times% (nircmd infobox "Пинг завершён." "trace" & exit /b)
     
     
    Последнее редактирование: 19 мар 2017
    orderman нравится это.
  7. orderman
    Оффлайн

    orderman Активный пользователь

    Сообщения:
    1.164
    Симпатии:
    1.397
    Баллы:
    433
    Dragokas, спасибо еще раз. Все работает:Drinks:
     

Поделиться этой страницей