13

通常、サーバーの IP アドレスに ping を実行すると、次のように返されます。

Pinging <IP address> with 32 bytes of data:
Reply from <ip> : bytes=32 time=151 TTL=121
Reply from <ip> : bytes=32 time=151 TTL=121
Reply from <ip> : bytes=32 time=151 TTL=121
Reply from <ip> : bytes=32 time=151 TTL=121

Ping statistics for <IP address>:
packets: sent = 4, Received = 4, lost = 0 (0% loss),
Approximate round trip times in milli-secounds:
Minimum = 151ms, Maximum = 151 ms, Average = 151 ms

Windows の cmd.exe で単純なコマンドを実行すると (Windows の言語に関係なく)、次の行のみ (1 つの ping テストの応答行のみ) を返すにはどうすればよいですか?

Reply from <IP address> : bytes=32 time=151 TTL=121

おそらく最も簡単な方法は、2 行目だけを表示することでしょうか? これはどのように行うべきですか?Windowsでのやり方がわからないからです。

4

7 に答える 7

4

findstr コマンドと for の行スキップ オプションを組み合わせることができます。

C:\>ping 127.0.0.1 | for /f "skip=3 tokens=*" %a in ('findstr Reply') do @echo %a

出力は次のとおりです。

Reply from 127.0.0.1: bytes=32 time<1ms TTL=128

バッチファイルを書き込む場合に変更%aします。%%a

于 2012-10-16T16:55:13.520 に答える
3

良い、

ping -n 1 <hostname/IP>

1 つの ping 要求のみを送信します。FINDそして、コマンド以外を使用して返信行を見つけることができるはずです。

したがって、次のようなものです。

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

アップデート

上記が英語版の Windows 7 マシンで動作することはわかっています。他のローカリゼーションでも機能すると思いますが、これは間違った仮定である可能性があります。

更新 2

この質問は、いくつかの洞察を提供するようです。ping の出力を (>出力リダイレクト パイプを使用して) ファイルに書き込んでから、回答のコマンドを使用して 2 行目だけを取得する必要がある場合があります。

于 2012-09-07T14:22:20.360 に答える
2

バッチ内からは非常に簡単ですが、コマンドラインからは...醜いのは控えめな表現です:

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

しかし、それはトリックを行い、2 行目 (含まれているものは何でも) を出力し、残りをスキップします。変更して印刷する行を変更できskip=ます。

PowerShell を利用できる場合は、次のように簡単に実行できます (はい、PS で ping を実行する方法ではないことはわかっています): powershell "ping -n 1 localhost | select -index 2"。私の(XP)ラップトップでは、pingは各行に追加のCRを挿入するため、インデックスで遊ぶ必要がある場合があります。これにより、PSからのダブルスペーシング出力の効果があります。

于 2012-09-08T09:50:10.007 に答える
1

@wmzの回答に基づいて、

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

言語に依存しないワンライナーとして問題ありません。
また、find と findstr では返されない応答が返されない場合 (タイムアウト) にも結果が返されます。

于 2012-10-26T16:26:16.817 に答える
1

これはpowershellで実現できます...スクリプトに追加できるコードは次のとおりです

$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,"***")
}

必要な任意の形式で文字列をフォーマットできます。

于 2012-09-07T15:03:21.967 に答える