ハードなソフトの話

アクセスカウンタ

zoom RSS バッチファイルでリアルなタイムスタンプ(ISO8601)

<<   作成日時 : 2017/02/12 15:18   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

環境変数にDATEおよびTIMEというのがあるのでバッチファイルでタイムスタンプを表示したいときはコマンドラインで次のように入力すれば表示できる。

echo %DATE% %TIME%

表示結果:

2017/02/12 13:14:29.79

そこで、次のようなバッチファイルを作る。

@echo off
for /L %%i in (1, 1, 3 ) do (
    echo %DATE% %TIME% - %%i 回目の実行
    ping localhost > nul
)

実行結果は次のようになる。

2017/02/12 13:19:14.84 - 1 回目の実行
2017/02/12 13:19:14.84 - 2 回目の実行
2017/02/12 13:19:14.84 - 3 回目の実行

時刻が同じである。つまり、時刻が更新されていない。これはバッチファイルの仕様である。%TIME%はバッチファイルの起動時の時間になる。こんな時は、遅延環境変数展開機能を使う。

改良点は次の通り:

  1. 遅延環境変数展開を有効にする: setlocal enableDelayedExpansion
  2. %の代わりに!を使う: %TIME% ---> !TIME!

このことを考慮して書き直すと次のようになる。

@echo off
setlocal EnableDelayedExpansion
for /L %%i in (1, 1, 3 ) do (
    echo !DATE! !TIME! - %%i 回目の実行
    ping localhost > nul
)
endlocal

実行結果は次のようになる。

2017/02/12 13:26:46.02 - 1 回目の実行
2017/02/12 13:26:49.07 - 2 回目の実行
2017/02/12 13:26:52.16 - 3 回目の実行

ここで、もう一歩踏み込んでISO8601形式のタイムスタンプでログを出力可能にする。

  • 今までの形式: 2017/02/12 15:00.123
  • ISO8601形式: 2017-02-12T15:00+0900

改良点は次の通り:

  1. サブルーチンにする: put_log
  2. DATE環境変数の/をからハイフンにする: !DATE:/=-!
  3. ミリ秒は不要なので削る:  !TIME:~0,8!
  4. 日付と時刻の間にTを挿入する
  5. タイムゾーン(日本で固定)として+09:00を追加する

このことを考慮して書き直すと次のようになる

@echo off
setlocal EnableDelayedExpansion
for /L %%i in (1, 1, 3 ) do (
    call :put_log "%%i回目の実行"
    ping localhost > nul
)
endlocal
goto :eof

:put_log
setlocal

set tt=!TIME:~0,8!
echo !DATE:/=-!T!tt: =0!+09:00 %~1

endlocal
goto :eof

実行結果

2017-02-12T14:58:10+09:00 1回目の実行
2017-02-12T14:58:13+09:00 2回目の実行
2017-02-12T14:58:17+09:00 3回目の実行

関連情報:

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
バッチファイルでリアルなタイムスタンプ(ISO8601) ハードなソフトの話/BIGLOBEウェブリブログ
文字サイズ:       閉じる