How to get only the reply line of a ping test on Windows

后端 未结 7 1302
你的背包
你的背包 2021-02-04 12:01

Usually, when pinging a server IP address we have this in return:

Pinging  with 32 bytes of data:
Reply from  : bytes=32 time=151 TTL         


        
相关标签:
7条回答
  • 2021-02-04 12:07

    You can accomplish this with powershell... here is the code you can add to a script

    $ping = new-object System.Net.NetworkInformation.Ping
    $reply = $ping.send('127.0.0.1')
    if ($reply.status -eq "Success"){
        [string]::Format("Reply from {0},time={1}",$reply.Address.ToString(),$reply.RoundtripTime)
        }else{
        $z = [system.net.dns]::gethostaddresses($hostname)[0].ipaddresstostring
        [string]::Format("FAIL,{0},{1}",$z,"***")
    }
    

    You can format the string in any format you want.

    0 讨论(0)
  • 2021-02-04 12:09

    Based on @wmz answer,

    (for /f "skip=3 tokens=*" %F in ('ping -n 1 <hostname/IP>') do @if not defined _A @echo %F&set _A=0) &set "_A="
    

    is ok as a one-liner not language dependent.
    It will also give the result when no response is given (Timeout), where find and findstr will not.

    0 讨论(0)
  • 2021-02-04 12:15

    This may work more universally.

    ping -n 1 <hostname/IP> | FIND "TTL="
    
    0 讨论(0)
  • 2021-02-04 12:16

    It's pretty simple from within batch, but from command line... ugly is major understatement:

    (for /f "skip=1 delims=" %F in ('ping -n 1 localhost') do @if not defined _A @echo %F&set _A=0) &set "_A="
    

    But it does the trick, prints second line (whatever it will happen to contain) and skips the rest. You may change line it prints changing skip=.

    If you have powershell available, you could simply do: (yes I know it's not how pinging is supposed to be done in PS): powershell "ping -n 1 localhost | select -index 2". You may need to play with index, as on my (XP) laptop ping inserts addtional CR in each line, which has an effect of double - spacing output from PS.

    0 讨论(0)
  • 2021-02-04 12:22

    For some reason, I couldn't get the FIND pipe to work in a powershell 5.1 shell. Feeling like this was all overly complicated, I thought if only I could grep the Reply line? I then found the powershell equivalent! I just used select-string on the first line matching 'Reply' which gave me the one line output I was looking for. So this worked very simply and easy for me.

    ping -n 1 <hostname/IP> | select-string -pattern 'Reply'
    
    0 讨论(0)
  • 2021-02-04 12:26

    Well,

    ping -n 1 <hostname/IP>
    

    Will send only 1 ping request. And you should be able to find the reply line using none other than the FIND command.

    So, something like this:

    ping -n 1 <hostname/IP> | FIND "Reply"
    

    UPDATE

    I know the above works on an English, Windows 7 machine. I would assume that it would work for other localizations, but this may be an incorrect assumption.

    UPDATE 2

    This question seems to provide some insight. You may have to write the output of ping to a file (using the > output redirection pipe) and then use the commands in the answers to get only the second line.

    0 讨论(0)
提交回复
热议问题