日々常々

ふつうのプログラマがあたりまえにしたいこと。

ファイル名にファイルのタイムスタンプをつけるバッチ

ドキュメントとかを単純に更新せず、ファイル名を変更してバックアップを取って行くという旧世代的な管理をしている時にいちいちファイル名を手打ちで変更するのが面倒になったので、タイムスタンプの日付をつけた名前に変更するところを自動化してみようと。出来たは良いけど、それほど作業が効率化されるわけでもなく。
こういう「なんとなく使える気はするけどまともには使えない(一応)プログラム言語」ってのはいっぱいあって、きちんと勉強して使いこなせるようになったほうが何かと便利なんだろうけど、出来なくてもそれほど困らないからどうも後手後手になってしまう。適当に書いてとりあえず動くってだけで、ちゃんと見たらダメダメなのかもしれない。けれど要件は満たしてるから問題ない。そんな思考がコの業界の病気で、それに文句をつけてるんだから勉強するべきか、うむむむ……。


・やりたいこと
更新日付が2009年9月25日のファイルbbb.txtのファイル名をbbb_20090925.txtに変更する。


・バッチのなかみ

@echo off

set ADDTEXT=%~t1
set ADDTEXT=%ADDTEXT:/=%
set ADDTEXT=%ADDTEXT:~0,8%

set NEWFILENAME="%~n1_%ADDTEXT%%~x1"

echo ファイル名を変換中...
echo 変更後のファイル名は %NEWFILENAME% になります。

rename %1 %NEWFILENAME%


・つかいかた

  1. 上記のコードを適当な名前で保存する。拡張子はcmdかbatです。
  2. C:\Documents and Settings\[ユーザ名]\SendToに置く。ショートカットでも。
  3. 名前を変更したいファイルの右クリックメニューから送るで選ぶ。
  4. ファイル名が変更される。


・いいわけ
特に問題なければ一瞬DOS窓が開いてすぐ閉じて、ワンテンポおくれてファイル名が変更されます。これはエクスプローラーが更新するまでのタイムラグで、ファイル名自体は閉じた時点で変わってるはず。ネットワーク上のファイルを処理する場合などで時間がかかった時のために一応echoを入れています。変更後のファイル名と同じファイルが存在した場合は、renameがエラーになってそのまま終了します。エラーメッセージは出るけどすぐ閉じるので判りません。なんか変更されない、と言う時はそれかも。


・めも
「送る」に入れるのが手っ取り早いけど、右クリックメニューの直に置く場合はレジストリの変更で出来る……のかな?(参考:エクスプローラの右クリック・メニューを整理する − @IT