そんなわけで週明け木曜日。連休も終わってしまってやる気しないなー。やる気が落ちてきてたのは連休中からだから別に休みが終わってどうこうというわけでもないんだけど。6月くらいから高値水準にあったやる気も一気に本来あるべき水準まで調整されてしまったとかそんな感じかと。
仕事の話。今のシステムではよくわからないテクノロジーで日々増え続ける外部インターフェースファイルやログファイルなんかを片付けてるんだけど、これが単純に1つのファイルを延々増大させるようなタイプのものに対応していないんだそうだ。
そんなわけでちょっとお手軽に作ってみるとこんな感じ。一応1世代前のは取っておくようにした。

 FOR /F %X IN (%LISTFILE%) DO IF /I %~zX GTR %SIZE% MOVE %~fX %~dpnX.bak /Y 

環境変数LISTFILEは監視対象ファイル名(フルパス)のリスト、SIZEは対象ファイルをバックアップに移すサイズ(バイト単位)。例によって会社の環境で作った物の再現なのでそのままでは動かないかも(テストしてない)。欠点は別途監視対象のリストファイルを用意しないといけないこと。この辺はヒアドキュメントが使えるようならうまくやれると思うんだけどねえ。まあそう言ったところがコマンドプロンプトの貧弱なところだ。VISTA以降の世界ではPowerShellが使われるようになるのかなあ。WSHは少なくともうちの周りではまったく使われる気配はないけど。まあしかしそこも一応工夫で何とかなりそう。

 FOR /F "skip=30" %%X IN (%0) DO IF /I %%~zX GTR %SIZE% MOVE %%~fX %~dpnX.bak /Y 

急にバッチファイル用の記述に変わったけど、forのオプションで先頭n行(今回はn=30)を読み飛ばすと言うのがあるので、このスクリプトを記述したファイル自身に一覧を書いてしまえとそう言う話。行数依存なのはちょっと気になるけどまあ(余計なコメントとかを省けば)本文は数行で終わるものなので良いんじゃないかと。スクリプト部分の最後には「GOTO :EOF」を忘れずに。
ちなみにこれは一覧にフォルダを指定したり、同名の読み取り専用ファイルがあるとたぶん失敗するし、まあ他にもなんかエラーになるケースとかありそうなので、まあご家庭用向けだよねえ。まあたいていのログファイルは多少肥大したところでどうと言うことはないはずなんだよね。1MB/dayとして5年で高々2GB程度だし。それ以上のサイズになるような大きなシステムならログ管理方針とかちゃんとあるだろうし。1つのファイルがそんなにでかくなったら調査に使えないだろうと言う話はあるけど。
ちょうど部屋に帰ったら会社の人と会った(←なんか変な表現だな)ので、夕飯をと言うか酒を飲みに。そこで先週末俺が帰った後の話が話題に上ったりもしたんだけど、なんでも女の子のいるような店というのはパチンコのような物で一度当たりを引くと考え方が変わるよと言う話らしい。ふーむ。それじゃあ俺には一生面白さはわからないことになるな。だいたいパチンコなんて(以下略。まあ単にたとえが適切でないのか実際にそんなもの(受ける層が近いとか?)なのかはともかく。細かい金がなかったので払いを預かってもらっている。週明けに忘れずに精算すること。