1. ホーム
  2. windows

[解決済み] Windows CLIでタイムスタンプを使ったPingを打つ

2022-03-06 13:54:44

質問

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で提供されるコマンドだけでこれを実現したいことに注意してください。

どのように解決するのですか?

@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 編集済 : より高速で新しいマシンや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"

2つの付加的な pause コマンドがサブシェルの先頭に含まれます(1つしか使えませんが、サブシェルに含まれる pause は入力文字を消費し、CRLFのペアは破棄され、LFのある行が読み込まれます)入力データを待つために ping -n 2 localhost が含まれ、内部ループで読み込むたびに1秒待機する。その結果、より安定した動作とCPU使用率の低減を実現しています。

注:内側の ping で置き換えることができます。 pause が、読み込まれた各行の最初の文字が pause で取得されず set /p