Пінг з позначкою часу на інтерфейсі клієнта Windows


80

У командному рядку Windows cmdя використовуюping -t to 10.21.11.81

Reply from 10.21.11.81: bytes=32 time=3889ms TTL=238
Reply from 10.21.11.81: bytes=32 time=3738ms TTL=238
Reply from 10.21.11.81: bytes=32 time=3379ms TTL=238

Чи є можливості отримати такий результат?

10:13:29.421875 Reply from 10.21.11.81: bytes=32 time=3889ms TTL=238
10:13:29.468750 Reply from 10.21.11.81: bytes=32 time=3738ms TTL=238
10:13:29.468751 Reply from 10.21.11.81: bytes=32 time=3379ms TTL=238

Зверніть увагу, що я хочу досягти цього лише за допомогою команд, наданих CMD



Більш загальна версія: stackoverflow.com/questions/21564/…
Антон Тарасенко

Відповіді:


95
@echo off
    ping -t localhost|find /v ""|cmd /q /v:on /c "for /l %%a in (0) do (set "data="&set /p "data="&if defined data echo(!time! !data!)" 

Примітка : код, який буде використовуватися в пакетному файлі. Для використання з командного рядка замініть %%aна%a

Запустіть пінг, примусово виведіть правильний буферизований вихід ( find /v) і запустіть cmdпроцес із увімкненим відкладеним розширенням, який буде виконувати нескінченний цикл зчитування конвеєрних даних, які будуть луною на консолі з префіксом поточного часу.

2015-01-08 відредаговано : У більш швидких / нових версіях машин / ОС існує проблема синхронізації в попередньому коді, що робить set /pпрочитане рядком, поки pingкоманда все ще пише його, а результатом є скорочення рядків.

@echo off
    ping -t localhost|cmd /q /v /c "(pause&pause)>nul & for /l %%a in () do (set /p "data=" && echo(!time! !data!)&ping -n 2 localhost>nul"

Дві додаткові pauseкоманди включені на початку під оболонки (можна використовувати лише одну, але, оскільки pauseспоживає вхідний символ, пара CRLF порушується і зчитується рядок з LF), щоб дочекатися вхідних даних, а a ping -n 2 localhostдодається до зачекайте секунду для кожного прочитання у внутрішньому циклі. Результат - стабільніша поведінка та менше використання процесора.

ПРИМІТКА: Внутрішній pingможна замінити на pause, але тоді перший символ кожного прочитаного рядка споживається символом, pauseа не отримуєтьсяset /p


7
@ Mr.SuicideSheep, це пакетний файл. Якщо ви хочете протестувати його з командного рядка, замініть усі знаки подвійного відсотка (які потрібно екранувати в пакетні файли) на одиничні знаки відсотка.
MC ND

5
Коли я намагаюся використовувати це, я в кінцевому підсумку отримую розриви рядків на виході. Вони зазвичай з’являються після 52-го символу у вихідних даних. Будь-які думки щодо того, чому?
Райан

2
@AlexG, якщо вам потрібна дата (оригінальне запитання не включало її у бажаний результат), змініть echoкоманду наecho(!date! !time! !data!
MC ND

4
відсутність відповіді на пінг, тому я зробив управління + C, і комп’ютер повільно, заморозив, а потім синій екран
Dan

2
@Dan, Єдиний спосіб, яким я можу подумати отримати BSOD, який запускає цей код (відкидаючи проблеми hw або драйвера), - це вилка-бомба. Ви зателефонували до свого командного файлу ping.batчи ping.cmd?
MC ND

92

Windows PowerShell:

варіант 1

ping.exe -t COMPUTERNAME|Foreach{"{0} - {1}" -f (Get-Date),$_}

варіант 2

Test-Connection -Count 9999 -ComputerName COMPUTERNAME | Format-Table @{Name='TimeStamp';Expression={Get-Date}},Address,ProtocolAddress,ResponseTime

4
Працював чудово, не маючи жодних проблем з нескінченним циклом / макс. Процесором інших пропозицій.
Серін,

1
Тест-підключення -Кір 9999 -Ім'я комп'ютера google.com | Format-Table @ {Name = 'TimeStamp'; Expression = {Get-Date}}, Address, ProtocolAddress, ResponseTime | tee -file C: \ Users \ yourname \ Desktop \ pingtest.txt -append
Serinus

просте і чітке рішення. перший варіант спрацював для мене
Шрі Харша,

Якщо ви хочете вставити варіант 2 прямо в підказку PowerShell, ви можете опустити біт -ComputerName, і він запропонує вам список ComputerNames (просто залиште другий пустим). Test-Connection -Count 9999 | Format-Table @{Name='TimeStamp';Expression={Get-Date}},Address,ProtocolAddress,ResponseTime
mwfearnley

1
Розширення наведених вище параметрів > C:\temp\ping.txtперенаправляє вихідні дані у файл. Якщо ви також хочете побачити вихідні дані, просто виконайте Get-Content C:\temp\ping.txt -tail 10 -waitв іншій PowerShell.
flandersen

68

Ви можете зробити це в Bash (наприклад, Linux або WSL):

ping 10.0.0.1 | while read line; do echo `date` - $line; done

Хоча це не дає статистики, яку ви зазвичай отримуєте, коли натискаєте ^ C в кінці.


4
Це найкраще поки що
Сатіш

2
Працює ідеально !!
Шоайб-хан,

4
Це НЕ працює у Windows, як було задано у питанні.
Янош

3
Це чудово працює в Windows, під Підсистемою Windows для Linux (WSL), що є необов’язковою функцією.
Лі

1
Я намагався реєструвати результати пінгу. date +%sє більш корисним, оскільки відображає цілі мітки часу.
Хіманшу Шехар

28

Пакетний сценарій:

@echo off

set /p host=host Address: 
set logfile=Log_%host%.log

echo Target Host = %host% >%logfile%
for /f "tokens=*" %%A in ('ping %host% -n 1 ') do (echo %%A>>%logfile% && GOTO Ping)
:Ping
for /f "tokens=* skip=2" %%A in ('ping %host% -n 1 ') do (
    echo %date% %time:~0,2%:%time:~3,2%:%time:~6,2% %%A>>%logfile%
    echo %date% %time:~0,2%:%time:~3,2%:%time:~6,2% %%A
    timeout 1 >NUL 
    GOTO Ping)

Цей скрипт запитає, якого хоста пінгувати. Вивід Ping виводиться на екран та файл журналу. Приклад виведення файлу журналу:

Target Host = www.nu.nl
Pinging nu-nl.gslb.sanomaservices.nl [62.69.166.210] with 32 bytes of data: 
24-Aug-2015 13:17:42 Reply from 62.69.166.210: bytes=32 time=1ms TTL=250
24-Aug-2015 13:17:43 Reply from 62.69.166.210: bytes=32 time=1ms TTL=250
24-Aug-2015 13:17:44 Reply from 62.69.166.210: bytes=32 time=1ms TTL=250

Файл журналу називається LOG_ [ім'я хосту] .log і записується в ту саму папку, що і сценарій.


продовжує говорити, що сон не розпізнається, але сценарій працює нормально. Як зупинити результат від повторення відлуння у вікні cmd і просто продовжувати переходити лише до файлу журналу?
allwynmasc

Вам слід завантажити та витягти sleep.zip в ту саму папку, що і з того місця, де ви виконували пакетний файл. Команда сну змушує сценарій чекати 1 секунду після кожного пінгу. Без нього не буде паузи між "пінгами", і ваш файл журналу буде рости дуже швидко. Щоб запобігти показу результатів у вікні cmd, ви можете видалити останній рядок зі сценарію, який починається зі слова "echo"
sabo-fx

@ sabo-fx іноді 'sleep 1> NUL' не працює (команда не розпізнана), я використовував 'timeout 1> NUL'
Asprelis

@Asprelis: Це чудово. Подяка за підказку. Я не знав про існування команди "тайм-аут". Я згоден, що набагато приємніше використовувати команди, що входять до складу ОС.
sabo-fx

Я протестував сценарій. Працюйте нормально, але ви повинні додати один пробіл у 3. рядку після набору та перед / p.
mikia

10

Це може комусь допомогти: [Потрібно запустити в Windows PowerShell]

ping.exe -t 10.227.23.241 |Foreach{"{0} - {1}" -f (Get-Date),$_} >> Ping_IP.txt

- Перевірте наявність файлу Ping_IP.txt у поточному каталозі або домашньому шляху користувача.

Вищезазначена команда дає вивід у файлі, як показано нижче;

9/14/2018 8:58:48 AM - Pinging 10.227.23.241 with 32 bytes of data:
9/14/2018 8:58:48 AM - Reply from 10.227.23.241: bytes=32 time=29ms TTL=117
9/14/2018 8:58:49 AM - Reply from 10.227.23.241: bytes=32 time=29ms TTL=117
9/14/2018 8:58:50 AM - Reply from 10.227.23.241: bytes=32 time=28ms TTL=117
9/14/2018 8:58:51 AM - Reply from 10.227.23.241: bytes=32 time=27ms TTL=117
9/14/2018 8:58:52 AM - Reply from 10.227.23.241: bytes=32 time=28ms TTL=117
9/14/2018 8:58:53 AM - Reply from 10.227.23.241: bytes=32 time=27ms TTL=117
9/14/2018 8:58:54 AM - Reply from 10.227.23.241: bytes=32 time=28ms TTL=117

3
Це рішення ідентичне рішенню, наданому в попередній відповіді на це питання .
skomisa

@skomisa: це трохи інакше, оскільки він також зберігає у файлі, який згодом можна використовувати.
khalidmehmoodawan

6

У Windows

Ви можете використати одну з інших відповідей.

На Unix / Linux

while :;do ping -n -w1 -W1 -c1 10.21.11.81| grep -E "rtt|100%"| sed -e "s/^/`date` /g"; sleep 1; done

Або як функція pingtдля вашого ~ / .bashrc:

pingt() {
  while :;do ping -n -w1 -W1 -c1 $1| grep -E "rtt|100%"| sed -e "s/^/`date` /g"; sleep 1; done
}

джерело: https://stackoverflow.com/a/26666549/1069083


1
На Mac -wнедійсний параметр ping.
jorisw

3

Я думаю, що мій код - це те, що потрібно всім:

ping -w 5000 -t -l 4000 -4 localhost|cmd /q /v /c "(pause&pause)>nul &for /l %a in () do (for /f "delims=*" %a in ('powershell get-date -format "{ddd dd-MMM-yyyy HH:mm:ss}"') do (set datax=%a) && set /p "data=" && echo([!datax!] - !data!)&ping -n 2 localhost>nul"

показувати:

[Fri 09-Feb-2018 11:55:03] - Pinging localhost [127.0.0.1] with 4000 bytes of data:
[Fri 09-Feb-2018 11:55:05] - Reply from 127.0.0.1: bytes=4000 time<1ms TTL=128
[Fri 09-Feb-2018 11:55:08] - Reply from 127.0.0.1: bytes=4000 time<1ms TTL=128
[Fri 09-Feb-2018 11:55:11] - Reply from 127.0.0.1: bytes=4000 time<1ms TTL=128
[Fri 09-Feb-2018 11:55:13] - Reply from 127.0.0.1: bytes=4000 time<1ms TTL=128

Примітка .


3

Це може відповідати рахунку для пізніших версій Windows:

for /l %i in (1,0,2) do @echo|cmd /v:on /c set /p=!time! & ping -n 1 10.21.11.81 | findstr "Reply timed" && timeout /t 2 > nul:

це саме те, що я шукаю! дякую ... працює чудово. я отримую час, а потім результат, який я очікував би від пінг-рядка за рядком
Кіт Е. Трусделл

2

Спробуйте це:

Створіть пакетний файл із наступним:

echo off

cd\

:start

echo %time% >> c:\somedirectory\pinghostname.txt

ping pinghostname >> c:\somedirectory\pinghostname.txt

goto start

Ви можете додати власні параметри до команди ping відповідно до ваших вимог. Це не ставить позначку часу на тому самому рядку, що і пінг, але все одно отримує необхідну інформацію.

Ще кращий спосіб - використовувати fping, завантажте його тут http://www.kwakkelflap.com/fping.html .


404 за цим посиланням зараз
Hicsy

1

Використовуйте

ping -D 8.8.8.8

Зі сторінки користувача

-D     Print timestamp (unix time + microseconds as in gettimeofday) before each line

Вихідні дані

[1593014142.306704] 64 bytes from 8.8.8.8: icmp_seq=2 ttl=120 time=13.7 ms
[1593014143.307690] 64 bytes from 8.8.8.8: icmp_seq=3 ttl=120 time=13.8 ms
[1593014144.310229] 64 bytes from 8.8.8.8: icmp_seq=4 ttl=120 time=14.3 ms
[1593014145.311144] 64 bytes from 8.8.8.8: icmp_seq=5 ttl=120 time=14.2 ms
[1593014146.312641] 64 bytes from 8.8.8.8: icmp_seq=6 ttl=120 time=14.8 ms

0

Інший метод PowerShell (я хотів лише невдач)

$ping = new-object System.Net.NetworkInformation.Ping
$target="192.168.0.1"
Write-Host "$(Get-Date -format 's') Start ping to $target"
while($true){
    $reply = $ping.send($target)
    if ($reply.status -eq "Success"){
        # ignore success    
        Start-Sleep -Seconds 1
    }
    else{
        Write-Host "$(Get-Date -format 's') Destination unreachable" $target

    }
}

0

Мені це також потрібно для моніторингу проблем мережі з тим, що стосується часу очікування мого дзеркального відображення бази даних. Я використовую код команди, як показано нижче:

ping -t Google.com|cmd /q /v /c "(pause&pause)>nul & for /l %a in () do (set /p "data=" && echo(!date! !time! !data!)&ping -n 2 Google.com>nul" >C:\pingtest.txt

Вам просто потрібно змінити Google.com до імені вашого сервера. Для мене це чудово працює. і не забудьте зупинити це, коли закінчите. Файл pingtest.txt збільшиться на 4,5 КБ на хвилину (приблизно).

Дякуємо за raymond.cc. https://www.raymond.cc/blog/timestamp-ping-with-hrping/


0

Покращення відповіді MC ND для Windows.
Мені потрібен був сценарій для запуску в WinPE, тому я зробив наступне:

@echo off
SET TARGET=192.168.1.1
IF "%~1" NEQ "" SET TARGET=%~1

ping -t %TARGET%|cmd /q /v /c "(pause&pause)>nul & for /l %%a in () do (set /p "data=" && echo(!time! !data!)&ping -n 2 localhost >nul"

Це може бути жорстко закодовано для певної IP-адреси ( 192.168.1.1у моєму прикладі) або взяти переданий параметр. І як у відповіді MC ND, повторює пінг приблизно кожну 1 секунду.


0

Простий 😎:

@echo off

set hostName=www.stackoverflow.com
set logfile=C:\Users\Dell\Desktop\PING_LOG\NetworkLog\Log_%hostName%.text
echo Network Loging Running %hostName%...
echo Ping Log %hostName% >>%logfile%

:Ping
for /f "tokens=* skip=2" %%A in ('ping %hostName% -n 1 ') do (
    echo %date% %time:~0,2%:%time:~3,2%:%time:~6,2% %%A>>%logfile%
    timeout 1 >NUL
    GOTO Ping)

0

Замість того, щоб мати додатковий ping -n 2 localhostв кінці циклу, ви можете просто додати символ R раніше, !data!оскільки єдиними можливостями є відповідь або запит. Перший символ споживається з pause>nul. Отже, замість такого виразу:

ping localhost -t -l 4|cmd /q /v /c "(pause&pause)>nul & for /l %%a in () do (set /p data=&echo(!date! !time! !data!)&ping -n 2 localhost>nul"

Ви можете використовувати цей вираз:

ping localhost -t -l 4|cmd /q /v /c "(pause&pause)>nul & for /l %%a in () do (set /p data=&echo(!date! !time! R!data!)&pause>nul"

Що дає той самий результат, наприклад:

22:34:49.49 Reply from 172.217.4.46: bytes=4 time=14ms TTL=116
22:34:50.49 Reply from 172.217.4.46: bytes=4 time=14ms TTL=116
22:34:55.47 Request timed out.
22:34:56.49 Reply from 172.217.4.46: bytes=4 time=14ms TTL=116
22:34:57.49 Reply from 172.217.4.46: bytes=4 time=14ms TTL=116

0

Спробуйте замість цього:

ping -c2 -s16 sntdn | awk '{print NR " | " strftime("%Y-%m-%d_%H:%M:%S") " | " $0  }'

Перевірте, чи підходить вам


1
Perdona, колоке "un alias de servidor" coloca la dirección IP en lugar de la cadena "sntdn", салюдо
JuanZR
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.