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)にはこんなこと書いてありませんでした。いやはや危うくヘルプに足元をすくわれるところでした。