AHKによるファイルタイムスタンプの一括変更

 「YYYYMMDD.html」形式232個の日記ファイルを、日付と更新時刻が一致するようタイムスタンプを変更する作業。手でやってメゲたので、自動化しようとしてみた。

 最初に書いたスクリプトがこんなん。

Loop,C:\〜\diary\*.html
{
	RegExMatch("%A_LoopFileName%","(\d8).*",$);ファイル名から年月日取得
	FileSetTime ,%$1%210000 , ,M ,0 ,0;タイムスタンプ変更
}
msgbox,終了
return

 これが色々正規表現をいじってもうまくいかないので、諦めて年月日取得はClipNameに任せることにした。

Loop,C:\〜\diary\*.html
{
	run,c:\apps\ClipName\ClipName.EXE /N "%A_LoopFileLongPath%";対象ファイルをClipNameに投げる
	WinWaitClose ,ahk_class  ClipName 3.053,,,,;ClipName終了まで待機
	FileSetTime ,%clipboard%210000 , ,M ,0 ,0;クリップボードから年月日取得してタイムスタンプ更新
}
msgbox,終了
return

 これがまた見事に失敗する。どうも、clipboard変数がLoopコマンド開始前の値を保持しちゃってるようで、タイムスタンプが全部同じになってしまうありさま。
 もうめんどっちいので、ファイル名を拡張子付きでFileSetTimeに突っ込んでやることにした。

Loop,C:\〜\diary\*.html
{
	FileSetTime,%A_LoopFileName%
}
msgbox,終了
return

 時刻以下は00にしかならないけど、そこはどうでもいいので一応成功。こんな短いスクリプトでよかったんかい……。