[ホーム] -
[バッチファイル サンプル一覧] - [ping 結果に日付と時刻を付けるサンプルコード]
Windows 環境において ping コマンドの応答結果に日付と時刻を付けるサンプルコードです。
バッチで定期的に監視する場合などに有効活用してください。ファイルにリダイレクトすると結果を残すことができます。
【2023年8月26日追記】
2個目のサンプルコードを追加しました。ping 成功、失敗で日付に出力しています。
・先頭に@を付けることでコマンドそのものは画面に出力しません。
%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
}
本サイト内掲載されている情報は、著作権法により保護されています。いかなる場合でも権利者の許可なくコピー、配布することはできません。 このページはリンクフリーです。(このページへの直接リンクも可能です。)
[ホーム] - [バッチファイル サンプル一覧]