2007年03月18日

WindowsのBATファイルで日付と時刻を扱う方法

Windowsのバッチファイルで、ファイル名に日付や時刻を使いたいときがあります。 例えばバックアップのバックアップ先ファイル名です。ファイル名にバックアップ日時を入れるのは良くある話でしょう。

Perlなどのスクリプト言語を使えば簡単にできるのですが、バッチファイルだけでもできるので、やり方を紹介します。

%date%と%time%

使用するのは%date%と%time%という環境変数になります。 %date%には、以下の形式で日付が格納されています。
WindowsXPの場合

2007/03/18
Windows2000の場合
日 2007/03/18

%timeには、以下の形式で日時が格納されています。 WindowsXP/2000の場合

20:47:31.03

%date%と%time%はWindows98SEでは使えませんでした。たぶんWindows2000以降専用だと思います。Vistaは分かりません。

日時入りファイル名の設定

これらの環境を使って、「backup-20070318-204731」という、「backup-YYYYMMDD-hhmmss」形式のファイル名を設定してみます。

まずは、以下のように日付と時刻を一旦テンポラリな変数dtとtmに設定します。

set dt=%date:~-10%
set tm=%time: =0%
日付の方は、WindowsXPと2000のフォーマットの違いを吸収するため、最後尾から10文字取り出しています。
時刻の方は、時間が1桁だと、2桁目が空白になるので、空白を0に変換しています。
テンポラリな変数に設定しておくことにより、処理中に日付や時刻が変わった時の影響を受けなくなります。
但し、dtとtmに値を設定する瞬間に日付が変わると日付と時刻が食い違うこともありそうです。注意して下さい。

%で囲まれた中にある「:」や「~」の意味については以下の記事を参考にして下さい。
「バッチ・ファイル中で日付をファイル名に使用する」

あとはdtとtmを使って以下のようにファイル名を設定します。

set fname=backup-%dt:~0,4%%dt:~5,2%%dt:~8,2%-%tm:~0,2%%tm:~3,2%%tm:~6,2%

以降はfnameをご自由にお使い下さい。

投稿者 MASATO : 2007年03月18日 21:35 | トラックバック
コメント

%dt:~0,4%%dt:~5,2%%dt:~8,2% のところは %dt:/=% と書くと簡単ですよ。
%tm:~0,2%%tm:~3,2%%tm:~6,2% は
set tm=%tm:~0,6%
%tm::=%
と2行になってしまいますが。

Posted by: じゃく : 2007年03月21日 09:28
コメントする









名前、アドレスを登録しますか?