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

orderman

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

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

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,621
Реакции
6,060
- по окончанию выполнения вывести окно с сообщением об окончании работы.
Через каждый час выводить на экран окно? Не надоест?
- по окончанию выполнения вывести окно с сообщением об окончании работы.
по окончанию чего - всего задания или каждого из трёх?
Или когда все 5 раз отработает?
Примерно так:

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

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

CMD/BATCH:
@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, заходите в свойства ярлыка, в поле объект дописываете:
Код:
exec hide trace.cmd

trace.cmd - имя батника.

tr.png


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

Чтобы досрочно убить задание:
CMD/BATCH:
taskkill /im ping.exe
taskkill /im cmd.exe
 
Последнее редактирование:

orderman

Ветеран
Сообщения
1,205
Реакции
1,341
по окончанию чего - всего задания или каждого из трёх?
Или когда все 5 раз отработает?
Спасибо.
Сообщение должно появиться 1 раз после выполнения полностью всего задания.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,621
Реакции
6,060
С этим сложнее.
Необходимо запустить ещё 4-ый процесс, который будет следить за PID-ами.
Итого:

Основной батник:
CMD/BATCH:
@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
CMD/BATCH:
@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 KB · Просмотры: 5

orderman

Ветеран
Сообщения
1,205
Реакции
1,341
Dragokas, немного не то. Я, наверное, не совсем правильно объяснил. Сообщение должно быть только одно, после выполнения всех повторов, т.е. после завершения последнего цикла.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,621
Реакции
6,060
Ну тогда в первом варианте батника замените
CMD/BATCH:
if %ctimes%==%times% exit /b
на
CMD/BATCH:
if %ctimes%==%times% (nircmd infobox "Пинг завершён." "trace" & exit /b)
 
Последнее редактирование:
Сверху Снизу