Используйте цикл for /f
, чтобы перехватить вывод команды.Поскольку ваша команда ping
выводит несколько строк, она требует много анализа, чтобы найти правильные токены и разделители, чтобы получить нужные части.Затем просто соберите их в соответствии с вашими потребностями и поместите в цикл:
@echo off
set "IP=www.google.de"
:loop
set "loss="
for /f "tokens=1,9 delims=( " %%a in ('ping -n 1 %IP% ^|findstr "%% ms,"') do (
if not defined loss (set "loss=%%a") else (set "average=%%b")
)
echo %date% : %time% : %IP% - %loss% - %average%
goto :loop
(Примечание: findstr "%% ms,"
ищет строки, содержащие %
(должен быть экранирован с помощью другого %
) и /или строка ms,
- ровно две строки, которые нам нужны).Вы также можете использовать `findstr" Средний убыток ", но тогда скрипт будет работать только на английских версиях Windows.Мне нравится, чтобы мои скрипты были максимально независимыми от языка.
Вывод:
07.06.2019 : 19:40:39,37 : www.google.com - 0% - 13ms
07.06.2019 : 19:40:41,25 : www.google.com - 0% - 13ms
07.06.2019 : 19:40:43,24 : www.google.com - 0% - 15ms
07.06.2019 : 19:40:45,25 : www.google.com - 0% - 13ms
07.06.2019 : 19:40:47,24 : www.google.com - 0% - 13ms
Примечание: формат даты / времени зависит от настроек локали - ваши, вероятно, выглядят по-разному.
Примечание: с ping -n 1
не ожидайте, что потери будут отличаться от 0%
или 100%
Примечание: с ping -n 1
, Minimum
, Maximum
и Average
всеодинаковы (тем не менее, этот сценарий принимает Average
, поэтому, если вы используете что-то отличное от /n 1
, результат все равно будет таким, как вы ожидаете)