2004-01-05  シェルスクリプト雑記―現在日付時刻のファイル・ディレクトリを作成するには―

現在の日付時刻を表す文字列で,ディレクトリを作成する必要に迫られました。具体的には「20040105113432」といったディレクトリを,CMD.EXEで作成したいのです。「はてどうすれば」と思ってGoogleで調べてみたら,すぐ見つかりました。環境変数の「%DATE%」「%TIME%」を各々,参照してYYYY/MM/DDなんかに切り分ければよいだけだったのですね。以下,ISO8601形式(「20040105T113432」というように日付と時刻を「T」で区切った形式)のタイムスタンプのディレクトリを作成するサンプルです。

@echo
setlocal

set YYYY=%DATE:~2,4%
set MM=%DATE:~7,2%
set DD=%DATE:~10,2%
set HH=%TIME:~0,2%
set TMM=%TIME:~3,2%
set SS=%TIME:~6,2%

rem 文頭のスペースを取る。時刻が0時から9時の場合HHの文頭に半角スペース1字が入ってしまうらしい
if %HH% LEQ 9 (
  set HH=0%HH:~1,1%
)

set LOCALTIME=%YYYY%%MM%%DD%T%HH%%TMM%%SS%

echo %LOCALTIME%
mkdir %LOCALTIME%

endlocal

うーむ,こんな方法があったなんて知りませんでした。なんでも%DATE%や%TIME%は「動的な環境変数」というらしい。後になって,おなじみの「%ERRORLEVEL%」もじつはお友達だったということに気づいて,なるほど納得しました。ちなみに,ほかにどんなお友達がいるのか知りたい人は,プロンプトから「set /?」としてみましょう。新しい発見があるはず。それにしてもWindows2000のオンラインヘルプ(mk:@MSITStore:C:\WINNT\Help\windows.chm::/ntcmds.htm)にはこんなこと書いてありませんでした。いやはや危うくヘルプに足元をすくわれるところでした。