バッチファイル中で日付をファイル名に使用する


バッチファイル中で日付をファイル名に使用する

dateやtime変数から、数字の部分だけを取り出すには、単に「%date%」「%time%」とするのではなく、変数値の部分文字列抽出用の修飾を行えばよい。ある変数Vの、先頭からm番目の文字からn文字分を取り出すには、「%V:~m,n%」とする(mは0から始まる)。例えば変数Vの値が「ABCDEFGHIJKL」の場合、6文字目から2文字分取り出すには「%V:~5,2%」とすればよい(先頭文字は0番目と数えるので、6ではなく5を指定する)。

C:\>set V=ABCDEFGHIJKL

C:\>echo %V:~5,2% FG

 nを省略すると、位置mから最後までとなる(例:%V:~5%なら「FGHIJKL」となる)。mに負の数を指定すると、先頭ではなく、最後尾から数えた文字位置になる(%V:~-3%ならば最後の3文字「JKL」になる)。またnに負の数を指定すると、最後のn文字を除いた部分の文字列となる(位置mからn文字目の直前まで。例えば%V:~5,-3%ならばFGHIとなる)。まとめると、次のようになる。

書式意味
%V%変数Vの値全体%V% ⇒「ABCDEFGHIJKL」
%V:~m%m文字目から、最後まで%V:~5% ⇒「FGHIJKL」
%V:~m,n%m文字目から、n文字分%V:~5,2% ⇒「FG」
%V:~m,-n%m文字目から、最後のn文字分を除いたもの%V:~5,-2% ⇒「FGHIJ」
%V:~-m%後ろからm文字目から、最後まで%V:~-5% ⇒「HIJKL」
%V:~-m,n%後ろからm文字目から、n文字分%V:~-5,2% ⇒「HI」
%V:~-m,-n%後ろからm文字目から、最後のn文字分を除いたもの%V:~-5,-2% ⇒「HIJ」

変数の部分文字列の抽出 変数の値全体を参照するには「%V%」とするが、変数名の修飾子として「:~<数字>」を付けることにより、文字列の一部分だけを取り出すことができる。ここではVの値は「ABCDEFGHIJKL」とする。修飾子の詳しい解説はコマンド・プロンプト上で「set /?」を実行すると表示される。

 この結果、%date%変数から数字の部分だけを抜き出すには、「%date:~0,4date:~5,2date:~8,2%」とすればよいことが分かるだろう(年と月と日の部分をそれぞれ抜き出して結合している)。

C:\>echo %date% 2004/04/28

C:\>echo %date:~0,4date:~5,2date:~8,2% 20040428