winのfindは使えねぇ

WMIとの苦闘

ファイルサーバ上に保存している画像データ,1ヶ月以上経ったものを消すことになりました.が,そこはそれwin2003サーバ,普段使い慣れたfindコマンドがありません.正確に言うと,コマンドはあるけど中身はgrep.これじゃあ使えません.ってことでこれもJScriptで作ってみました.以下サンプルです.

var date = new Date();
date.setUTCHours(0,0,0,0);
date.setTime(date - 32 * 24 * 60 * 60 * 1000);
var strDate = date.getUTCFullYear().toString() +
  (date.getUTCMonth() + 1).toString().replace(/^(\d)$/, "0$1") +
  date.getUTCDate().toString().replace(/^(\d)$/, "0$1") +
  '000000.000000+000';
var wmi = GetObject("winmgmts:\\\\.\\root\\cimv2");
var cols = wmi.ExecQuery(
  "Select * From CIM_DataFile Where CreationDate < '" + strDate + "'" +
  " And Drive = 'C:' And Path = '\\\\Documents and Settings\\\\k.daiba\\\\'"
);
var items = new Enumerator(cols);
for(; ! items.atEnd(); items.moveNext()){
  var item = items.item();
  item.Delete();
}

1ヶ月前とかを計算するライブラリを見つける事ができなかったので,UTCで0時0分にいちど時間調整してから,32日前の日付を作り出すようにしてみました.それにしてもバックスラッシュ大杉.

あ,WinXPだとSelect文の中でDriveとPathの順番が変わっても動くんですが,Win2003だとDriveを先に指定しないと動きませんでした.