[ホーム] - [バッチファイル サンプル一覧] - [ping 結果に日付と時刻を付けるサンプルコード]

ping 結果に日付と時刻を付けるサンプルコード | Windows バッチファイル






Windows 環境において ping コマンドの応答結果に日付と時刻を付けるサンプルコードです。
バッチで定期的に監視する場合などに有効活用してください。ファイルにリダイレクトすると結果を残すことができます。

【2023年8月26日追記】
2個目のサンプルコードを追加しました。ping 成功、失敗で日付に出力しています。

・先頭に@を付けることでコマンドそのものは画面に出力しません。

サンプルコード集

以下は Windows 10 環境におけるサンプルコードと実行結果です。


%date%で日付、%TIME%で時刻を出力してから ping を実行しています。
結果からfindstrで"応答"文字列を検索することにより、表示行を少なくしています。このあたりは好みに合わせてカスタマイズしてください。


サンプルコード:



@echo [%date%/%TIME%]
ping -n 1 127.0.0.1 | findstr -i "応答"
@echo "--------------------------------------"


実行結果:


【PINGの応答がある場合】

[2020/03/25/11:39:22.82]

c:\>ping -n 1 127.0.0.1 | findstr -i "応答"
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
"--------------------------------------"



【PINGの応答がない場合】
[2020/03/25/11:38:57.66]

c:\>ping -n 1 10.0.0.2 | findstr -i "応答"
"--------------------------------------"



このサンプルでは結果を %ERRORLEVEL% で取得して成功(success)、失敗(fail) も出力しています。IPアドレスは暫定で8.8.8.8 にしています。自由に修正してください

サンプルコード:

:label1
PING -n 3 -w 1000 8.8.8.8
@IF %ERRORLEVEL%==0 ECHO %DATE% %TIME% Success
@IF %ERRORLEVEL%==1 ECHO %DATE% %TIME% Fail

GOTO label1


実行結果:



8.8.8.8 に ping を送信しています 32 バイトのデータ:
8.8.8.8 からの応答: バイト数 =32 時間 =34ms TTL=58
8.8.8.8 からの応答: バイト数 =32 時間 =25ms TTL=58
8.8.8.8 からの応答: バイト数 =32 時間 =24ms TTL=58

8.8.8.8 の ping 統計:
パケット数: 送信 = 3、受信 = 3、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 24ms、最大 = 34ms、平均 = 27ms

C:\temp>@IF %ERRORLEVEL%==0 ECHO %DATE% %TIME% Success
2023/08/26 0:29:44.13 Success

C:\temp>@IF %ERRORLEVEL%==1 ECHO %DATE% %TIME% Fail



次のサンプルは結果をテキストファイルに追加出力します。(>> で追記)

サンプルコード:

:label1
PING -n 3 -w 1000 8.8.8.8
@IF %ERRORLEVEL%==0 ECHO %DATE% %TIME% Success >>C:\temp\log.txt
@IF %ERRORLEVEL%==1 ECHO %DATE% %TIME% Fail >>C:\temp\log.txt

GOTO label1


実行結果:





次は本格ファイルです。運用などに理由する場合はこれを利用してください。

もし "プロセスはファイルにアクセスできません。別のプロセスが使用中です。" と出る場合はテキストファイルが開かれています。テキストファイルを閉じてから実行してください。

サンプルコード:


@echo off
setlocal EnableDelayedExpansion

REM 結果を出力するテキストファイルを指定(フルパス)
set outputFile=c:\temp\ping_results.txt

REM もし出力ファイルがあれば、削除
if exist %outputFile% del %outputFile%

REM PING 送付先を指定、自由に変更してください
set host=8.8.8.8

:loop
REM 現在の日付と時刻を取得
for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set datetime=%%a
set "datestamp=!datetime:~0,4!-!datetime:~4,2!-!datetime:~6,2! !datetime:~8,2!:!datetime:~10,2!:!datetime:~12,2!"

REM pingを実行し、結果をテキストファイルに追記
echo !datestamp! >> %outputFile%
ping %host% -n 1 >> %outputFile%

REM 次のping までの待ち時間
timeout /t 5

REM ループに戻る。ループさせたくないなら次の行を削除。
goto loop

endlocal


次はPowershell のサンプルです。Shift-jis の場合文字化けします。よって -Encoding で UTF8 を指定しています。

サンプルコード:

# 出力ファイル名を指定
$outputFile = "c:\temp\ping_results.txt"

# ターゲットホスト名またはIPを指定
$host2 = "8.8.8.8"

# メインループ
while ($true) {
# 現在の日付と時刻を取得
$currentDateTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss"

# 出力ファイルに日付と時刻を追加(Shift_JISエンコーディング)
Add-Content -Path $outputFile -Value $currentDateTime -Encoding UTF8
# pingを実行し、出力ファイルに結果を追加(Shift_JISエンコーディング)
ping $host2 -n 1 | Out-File -Append -Encoding UTF8 $outputFile

# 遅延(例えば、5秒)
Start-Sleep -Seconds 5
}








本サイト内掲載されている情報は、著作権法により保護されています。いかなる場合でも権利者の許可なくコピー、配布することはできません。 このページはリンクフリーです。(このページへの直接リンクも可能です。)

[ホーム] - [バッチファイル サンプル一覧]