Windows 11でpingの結果を日時とともに一行で出力するバッチファイルの作成方法

Windows
記事内に広告が含まれています。

Windows 11でpingコマンドを実行し、その日時と結果を一行で出力する方法について解説します。
バッチファイルを活用し、シンプルかつ効果的にログを記録する方法を詳しく紹介します。

バッチファイルで日時とping結果を一行で出力する方法

日時とping結果を一行で出力するバッチファイルのサンプル

通常、pingコマンドを実行すると、複数行の詳細な情報が表示されます。
しかし、日時とping結果を一行で記録するには、forコマンドとechoを活用します。

以下のバッチスクリプトを使うことで、指定したIPアドレスへのping結果を取得し、日時とともに一行で出力できます。

@echo off
setlocal enabledelayedexpansion

rem 記録するログファイル
set LOGFILE=ping_log.txt

rem 対象のホスト
set HOST=8.8.8.8

rem 現在の日時を取得(YYYY/MM/DD HH:MM:SS)
for /f "tokens=2 delims==" %%A in ('wmic os get localdatetime /value') do set datetime=%%A
set DATE=!datetime:~0,4!/!datetime:~4,2!/!datetime:~6,2!
set TIME=!datetime:~8,2!:!datetime:~10,2!:!datetime:~12,2!

rem pingの結果を取得し、一行に整形
for /f "tokens=2* delims=:" %%A in ('ping -n 1 %HOST% ^| findstr "からの応答"') do set PING_RESULT=%%A

rem ログに書き込み(例:2025/03/25 14:30:00 15ms)
echo %DATE% %TIME% %PING_RESULT% >> %LOGFILE%

rem 終了メッセージ
echo Ping結果を %LOGFILE% に記録しました。

endlocal

このスクリプトでは、以下の処理を行っています。

  1. wmic os get localdatetime /value を使って現在の日時を取得し、YYYY/MM/DD HH:MM:SS の形式に変換。
  2. ping -n 1 コマンドを実行し、findstr "からの応答" を使って応答結果のみを抽出。
    ^|はpingの結果をfindstrコマンドに渡すための特殊記号”|”を使うためのエスケープ方法としてキャレット記号「^」を前に置く必要があります。
  3. echo コマンドで、日時とping結果を一行でログファイルに書き込む。

ログの出力例

実行すると、ping_log.txt に以下のような形式で記録されます。

2024/03/25 14:30:00 バイト数 =32 時間 =7ms TTL=119 

これにより、日時とpingの応答時間を簡単に記録できます。

上記のスクリプトでは1回実行したらログに書き込んで終わりです。
では、一定間隔で継続的にPingを実行するには?について次の章で説明します。

一定間隔で継続的にpingを記録する方法

一定間隔で継続的にpingを記録するバッチファイルのサンプル

一定間隔で継続的にpingを記録したい場合は、gotoコマンドとラベル を利用してループ処理を追加します。

@echo off
setlocal enabledelayedexpansion

rem 記録するログファイル
set LOGFILE=ping_log.txt

rem 対象のホスト
set HOST=8.8.8.8

rem 繰り返し処理
:LOOP
rem 現在の日時を取得
for /f "tokens=2 delims==" %%A in ('wmic os get localdatetime /value') do set datetime=%%A
set DATE=!datetime:~0,4!/!datetime:~4,2!/!datetime:~6,2!
set TIME=!datetime:~8,2!:!datetime:~10,2!:!datetime:~12,2!

rem pingの結果を取得
for /f "tokens=2* delims=:" %%A in ('ping -n 1 %HOST% ^| findstr "からの応答"') do set PING_RESULT=%%A

rem ログに書き込み
echo %DATE% %TIME% %PING_RESULT% >> %LOGFILE%

rem 10秒待機して再実行
timeout /t 10 /nobreak >nul
goto LOOP

このスクリプトでは、timeoutコマンドを使用して10秒ごとにpingを実行し、結果をping_log.txtに追記します。

ログの出力例

実行すると、ping_log.txt に以下のような形式で記録されます。

2024/03/25 14:30:00 バイト数 =32 時間 =7ms TTL=119 
2024/03/25 14:30:10 バイト数 =32 時間 =5ms TTL=119 
2024/03/25 14:30:20 バイト数 =32 時間 =6ms TTL=119 

これにより、日時とpingの応答時間を簡単に記録できます。

バッチファイルを管理者権限で実行する方法


このスクリプトを実行する際、管理者権限が必要になる場合は以下の方法で実行します。
バッチファイルを管理者として実行するには、次の方法があります。

  1. 手動で管理者権限を付与
    • 作成したバッチファイルを右クリックし、「管理者として実行」を選択。
  2. スクリプト内で管理者権限を要求する
    バッチファイルの先頭に以下のコードを追加すると、自動で管理者権限で実行できます。
    @echo off
    rem 管理者権限で実行されているか確認
    net session >nul 2>&1
    if %errorLevel% neq 0 (
    echo 管理者権限が必要です。再実行します...
    powershell -Command "Start-Process cmd -ArgumentList '/c %~fs0' -Verb RunAs"
    exit
    )
    このスクリプトを追加すると、管理者権限がない場合に自動で昇格要求を出します。

PowerShellを使った方法(応用)

バッチファイルよりも柔軟な処理を行いたい場合は、PowerShellを活用するのもおすすめです。以下のスクリプトでは、PowerShellを使用してping結果を一行で出力し、ログに記録できます。

$LOGFILE = "ping_log.txt"
$HOST = "8.8.8.8"

while ($true) {
    $DATE = Get-Date -Format "yyyy/MM/dd HH:mm:ss"
    $PING_RESULT = (Test-Connection -ComputerName $HOST -Count 1 -Quiet) -eq $true ? "Success" : "Fail"
    "$DATE $PING_RESULT" | Out-File -Append -FilePath $LOGFILE
    Start-Sleep -Seconds 10
}

PowerShellのスクリプトはバッチファイルよりも簡潔で、エラーハンドリングがしやすいのが特徴です。

まとめ

Windows 11でpingの結果を日時とともに一行で記録するには、バッチファイルやPowerShellを活用できます。

  • forfindstrを使ってpingの応答時間を取得。
  • wmicを利用して日時を取得し、整形して出力。
  • timeoutgotoを活用して定期的に記録するスクリプトも作成可能。
  • PowerShellを使うと、より簡潔なコードで同様の処理が可能。

バッチファイルを使ったネットワーク監視やログ記録に役立つので、用途に応じてカスタマイズしてみてください。

免責規定

この記事で提供される情報は、一般的なガイダンスを目的としており、すべての環境やシステムでの動作を保証するものではありません。
OSのバージョンやリリースによっては、記載されている事が実行できない、または異なる結果をもたらす可能性があります。
また、会社所有のパソコン、スマホ、タブレットなどでは、ポリシーや権限によって実行できない場合があります。
この記事の情報を使用することによって生じる問題や結果について、筆者およびサイト管理者は責任を負いません。
すべての操作は自己責任で行ってください。

最後までお読みいただきありがとうございました。
またお会いしましょう!

コメント

タイトルとURLをコピーしました