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

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

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

  1. orderman

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

    Сообщения:
    1.164
    Симпатии:
    1.398
    Здравствуйте.
    Нужна Ваша помощь. Необходимо написать пакетный файл, который:
    - от имени текущего пользователя запускал команды:
    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 Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    5.284
    Симпатии:
    5.167
    Через каждый час выводить на экран окно? Не надоест?
    --- Объединённое сообщение, 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.png

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

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

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

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

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

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

    Сообщения:
    5.284
    Симпатии:
    5.167
    С этим сложнее.
    Необходимо запустить ещё 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 КБ
      Просмотров:
      3
    orderman, Phoenix и Кирилл нравится это.
  5. orderman

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

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

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

    Сообщения:
    5.284
    Симпатии:
    5.167
    Ну тогда в первом варианте батника замените
    Код (DOS):

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

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

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

    Сообщения:
    1.164
    Симпатии:
    1.398
    Dragokas, спасибо еще раз. Все работает:Drinks:
     
Загрузка...
Похожие темы - Помощь написании файла
  1. oniava
    Ответов:
    15
    Просмотров:
    379
  2. alex-s
    Ответов:
    1
    Просмотров:
    800
  3. fulll
    Ответов:
    21
    Просмотров:
    1.574
  4. arch144
    Ответов:
    3
    Просмотров:
    848
  5. Кирилл
    Ответов:
    4
    Просмотров:
    1.831
  6. Dragokas
    Ответов:
    2
    Просмотров:
    3.271

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

Загрузка...