Windows CLI에서 타임 스탬프로 핑


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에서 제공하는 명령만으로이 작업을 수행하고 싶습니다.



답변:


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

ping을 시작하고 올바른 라인 버퍼 출력 ( find /v)을 강제 실행 한 cmd다음 현재 시간이 접두사 인 콘솔에 에코 될 파이프 된 데이터를 읽는 무한 루프를 수행하는 지연 확장을 활성화 한 상태로 프로세스를 시작합니다 .

2015-01-08 edited : 더 빠른 / 최신 머신 / OS 버전에서는 이전 코드에 동기화 문제가있어 명령이 여전히 쓰기를 수행하고 결과가 줄을 잘라내는 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소비하는 A 입력 문자하는 CRLF 쌍 파손되고 LF가 읽혀질되어있는 선)은 입력 데이터를 기다려야하고,은 ping -n 2 localhost을 포함 내부 루프에서 읽을 때마다 잠시 기다리십시오. 그 결과 더 안정적인 동작과 CPU 사용량이 줄어 듭니다.

참고 : 내부 ping는로 바꿀 수 pause있지만 읽은 각 행의 첫 번째 문자는에서 소비되고 pause검색되지 않습니다.set /p


7
@ Mr.SuicideSheep, 이것은 배치 파일입니다. 명령 줄에서 테스트하려면 모든 이중 백분율 기호 (배치 파일 내부에서 이스케이프해야 함)를 단일 백분율 기호로 바꿉니다.
MC ND

5
이것을 사용하려고하면 출력에서 ​​줄 바꿈이 발생합니다. 일반적으로 출력에서 ​​52 번째 문자 뒤에 나타납니다. 왜 그런지 생각해?
라이언

2
@AlexG, 날짜가 필요한 경우 (원래 질문이 원하는 출력에 포함되지 않았 음) echo명령을echo(!date! !time! !data!
MC ND

4
핑에 응답이 없어서 control + C를했고 컴퓨터가 느려지고 멈춘 다음 블루 스크린
Dan

2
@Dan,이 코드를 실행하는 BSOD를 얻을 수있는 유일한 방법 (hw 또는 드라이버 문제 삭제)은 포크 폭탄입니다. 당신은 당신의 배치 파일이라고 적이 ping.bat거나 ping.cmd?
MC ND

92

WindowsPowershell :

옵션 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
다른 제안의 무한 루프 / 최대 CPU 문제없이 아름답게 작동했습니다.
Serinus

1
Test-Connection -Count 9999 -ComputerName google.com | Format-Table @ {Name = 'TimeStamp'; Expression = {Get-Date}}, 주소, ProtocolAddress, ResponseTime | tee -file C : \ Users \ yourname \ Desktop \ pingtest.txt -append
Serinus

간단하고 선명한 솔루션. 첫 번째 옵션이 나를 위해 일했습니다
Sree Harsha

옵션 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
지금까지 최고입니다
Satish

2
완벽하게 작동합니다 !!
쇼아 입 칸

4
이것은 질문에서 묻는 것처럼 Windows에서는 작동하지 않습니다.
Janos

3
이것은 선택 기능인 Linux 용 Windows 하위 시스템 (WSL)에서 Windows에서 잘 작동합니다.
Lee

1
핑 결과를 기록하려고했습니다. date +%s정수 타임 스탬프를 표시하므로 더 유용합니다.
Himanshu Shekhar

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 할 호스트를 묻습니다. 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_ [hostname] .log이며 스크립트와 동일한 폴더에 기록됩니다.


수면이 인식되지 않는다고 계속 말하지만 스크립트는 잘 작동합니다. 결과가 cmd 창에 계속 표시되는 것을 중지하고 로그 파일로만 계속 이동하는 방법은 무엇입니까?
allwynmasc 2015 년

sleep.zip을 배치 파일을 실행하는 폴더와 동일한 폴더에 다운로드하고 압축을 풀어야합니다. sleep 명령은 스크립트가 각 ping 후 1 초를 기다리도록합니다. 그것 없이는 '핑'사이에 멈춤이 없으며 로그 파일은 매우 빠르게 증가합니다. cmd 창에 결과를 표시하지 않으려면 "echo"라는 단어로 시작하는 스크립트에서 마지막 줄 을 제거 할 수 있습니다.
sabo-fx

@ sabo-fx 가끔 'sleep 1> NUL'이 작동하지 않음 (인식되지 않는 명령), 'timeout 1> NUL'사용
Asprelis

@Asprelis : 멋지네요. 팁 고맙습니다. 나는 "timeout"명령의 존재를 몰랐다. OS에 포함 된 명령을 사용하는 것이 훨씬 더 좋다는 데 동의합니다.
sabo-fx

스크립트를 테스트했습니다. 잘 작동하지만 설정 후와 / p 앞에 3. 줄에 공백 문자 하나를 추가해야합니다.
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 19.11.27

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

참고 : 명령 줄 내에서 사용할 코드이며 os에 powershell이 ​​미리 설치되어 있어야합니다.


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:

이것이 바로 제가 찾고있는 것입니다! 감사합니다 ... 완벽하게 작동합니다. 나는 시간을 얻고 나서 핑 라인에서 기대할 출력을 얻습니다
Keith E. Truesdell

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

man 페이지에서

-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.5KB 씩 증가합니다.

raymond.cc에 감사드립니다. https://www.raymond.cc/blog/timestamp-ping-with-hrping/


0

Windows에 대한 MC ND의 답변 개선.
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루프 끝에 추가하는 대신 !data!응답 또는 요청 만 가능하므로 이전에 문자 R을 추가 할 수 있습니다 . 첫 번째 문자는 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, coloqué "유엔 별칭 드 servidor"coloca 라 direcciónIP 엉 루가 드 라 카데나 "sntdn은"saludos
JuanZR
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.