21

I often have to ping servers for connectivity status. Is there a way to save the ping results (output) in a text file so that I can save entire day's ping results in a text file.

I am using Windows XP SP3.

Ping example:

ping 192.168.1.1 -t 

(using windows' ping)

or

ping 192.168.1.1

(using cygwin)

8 Answers 8

21

Use redirection, for example:

ping 192.168.1.1 -t > filename.txt

This will redirect all (standard) output from the program into filename.txt, which will be created if it doesn't exist and overwritten if it does.

You can use >> instead of > to redirect the output to a file and append the results to the end of the file, instead of overwriting (with thanks to @Jane T for the reminder).

Note that you will not receive the normal on-screen output if you do this.

Update in response to comment

To delay between pings and record the time of each, you can do some scripting.

Here is a quick Windows batch file I've thrown together. It prints the time, pings Google, then waits for 3 seconds before repeating itself. I'm not a batch file expert so if anyone spots any problems please flag them up! And this probably isn't the "best" way to achieve what you are after - that might make for a separate question really.

@ECHO OFF

:LOOPSTART

time /T
ping www.google.com -n 4
sleep -m 3000

GOTO LOOPSTART

Save this in a .bat file somewhere, edit the ping target and delay time as you need it, then run the .bat using redirection to pump the output of the whole thing to a file. You may need to replace the sleep -m 3000 command with timeout /T 3 depending on your Windows version.

Note that this batch file never ends, but can be terminated by Ctrl + C and then Y if run from cmd. (You must press Y because it asks if you want to stop the batch file - even though you cannot see the question because you've redirected the output!)

8
  • thanks! works well, can I show current time along with every ping, or can I change the duration between two pings
    – abel
    Oct 7, 2010 at 12:22
  • 2
    You'd have to do some scripting for this, ping won't be able to do it for you.
    – Azz
    Oct 7, 2010 at 12:25
  • Azz beat me to it - for that you'd need to change ping itself to output something different, or do some interesting scripting effort to - for example - output a timestamp, ping, wait 10seconds, repeat.
    – DMA57361
    Oct 7, 2010 at 12:28
  • glad to hear it can be done. waiting for more. has windows scripting got to do anything with this
    – abel
    Oct 7, 2010 at 12:32
  • 2
    "so that I can save entire day's ping results in a text file" You will need to use >> to append data to the output file.
    – Jane T
    Oct 7, 2010 at 12:51
3

If you are using the command prompt just redirect it to a text file using this format

ping 192.168.1.1 > ping.txt

That will do it.

2

You can use:

> ping 192.168.1.1 -t > ping-results
1
  • 1
    Using > as your PS1 shell prompt is really confusing when the command also includes a > for redirection. Aug 22, 2020 at 20:24
2

I wrote the script that pings google.com every 5 seconds and logging results with current time. Here you can find output to variables "commandLineStr" (with indices)

@echo off

:LOOPSTART

echo %DATE:~0% %TIME:~0,8% >> Pingtest.log

SETLOCAL ENABLEDELAYEDEXPANSION
SET scriptCount=1
FOR /F "tokens=* USEBACKQ" %%F IN (`ping google.com -n 1`) DO (
  SET commandLineStr!scriptCount!=%%F
  SET /a scriptCount=!scriptCount!+1
)
@ECHO %commandLineStr1% >> PingTest.log
@ECHO %commandLineStr2% >> PingTest.log
ENDLOCAL

timeout 5 > nul

GOTO LOOPSTART
1

Also if you want to see the ping results in display you can use this code

@ECHO OFF
:LOOPSTART
date /T >>Pingtest.log
time /T >>Pingtest.log
REM this line show you the ping results in display
ping 8.8.8.8 -n 1 

REM this line print the ping results in the log file
ping 8.8.8.8 -n 10 >>PingTest.log
sleep -m 1000
GOTO LOOPSTART
1

::PIng ISP Every 1 Seconds and write date , time and result to Text File

@ECHO OFF
:LOOPSTART
date /T >>Pingtest.log
time /T >>Pingtest.log
ping 8.8.8.8 -n 1 >>PingTest.log
sleep -m 1000
GOTO LOOPSTART
1

Try this

#!/bin/bash

ping -i 0.5  google.com | while read pingresponse; do echo "$(date): $pingresponse"; done > pingStream.txt
1
  • 1
    (1) @AndrewMorton: I’m not sure that your comment is entirely valid, since the question indicates that Cygwin is available.  But (2) saxjax: What’s with the -i?  My Windows ping says “Bad value for option -i, valid range is from 1 to 255.” and my Cygwin ping doesn’t recognize -i at all.  Also, (3) we don’t like code-only answers.  It is better to explain what your code is doing and how it is doing it. Aug 22, 2020 at 20:19
0

Simple....

Create one file called ip.txt and type the IPs and create the .bat file below.

@Echo Off

Set "ServerList=C:\Users\Script Ping-NSLook\ip.txt"
Set "LogFile=C:\Users\Script Ping-NSLook\PingResults.txt"

If Not Exist "%ServerList%" Exit /B
>"%LogFile%" (For /F UseBackQ %%A In ("%ServerList%"
) Do Ping -n 1 %%A|Find "TTL=">Nul&&(Echo Yes [%%A])||Echo No [%%A])

Enjoy:)

1
  • 1
    Welcome to SuperUser! How is your answer better than the accepted one? If you write a so similar answer, please explain in which aspect yours is better. May 4, 2022 at 5:38

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .