動画をタイトルごとにフォルダを掘って保存してるんだけど、再生したいときにいちいちフォルダの中に入ったりするのがめんどくさい。Vistaのエクスプローラは検索結果をフォルダのような感覚でアクセスできるから、最近更新されたmp4ファイルのみを表示する設定を作れば良いんじゃないかと思ったけど、わりとうまくいかない。
エクスプローラでCtrl+Fで検索のウィンドウを出して、検索ペインで設定をしていくといきなりつまづく。「10日以内に更新されたファイル」のような設定ができない。日付で「YYYYMMDD日以降」とか「以前」みたいなのは出来るけど、現在時刻を基準に「○日以内」みたいな設定ができない。ウンコすぎるだろ...。
検索条件はファイルとして保存できる。拡張子は .search-ms で、中身はUTF-8のXMLになってる。
Vistaにデフォルトで登録されている検索フォルダには「最近使ったファイル」や「最近の電子メール」というファイルがある。GUIでは設定できなくても.search-msファイルを手書きすれば、「○日以内」の設定ができるに違いないと思って確認。
<condition type="leafCondition" valuetype="System.StructuredQueryType.DateTime" property="System.DateModified" operator="imp" value="R00UUUUUUUUZZXD-30NU" propertyType="wstr" />
どうやらこれがそうらしい。valueの"30NU"の部分を"10NU"にすれば「10日以内」になる。その前の"R00UUUUUUUUZZXD"と"30NU"の"NU"の部分は意味がわからなかった。
とりあえず、これで日付による範囲指定はできた。
あれこれあって、だいたい目標としていたものになった。
(更新日が10日以内 AND (拡張子=".mp4" OR 拡張子=".wmv"))っていう条件で、検索対象のパスは "\\gae-a\video\tokyo" みたいな。
<query> <conditions> <condition type="andCondition"> <condition type="leafCondition" valuetype="System.StructuredQueryType.DateTime" property="System.DateModified" operator="imp" value="R00UUUUUUUUZZXD-10NU" propertyType="wstr" /> <condition type="orCondition"> <condition type="leafCondition" property="System.ItemType" propertyType="string" operator="eq" value=".mp4"> <attributes/> </condition> <condition type="leafCondition" property="System.ItemType" propertyType="string" operator="eq" value=".wmv"> <attributes/> </condition> </condition> </condition> </conditions> <kindList> <kind name="item"/> </kindList> <providers> <provider clsid="{88CF4A86-5D7A-48EB-B53E-EA388A390096}"/> </providers> <scope> <include path="\\gae-a\video\tokyo"/> </scope> </query>
ファイルが15,000くらいあるし、検索対象がネットワークなのでインデックスが利用できず、検索結果が揃うまでに結構時間がかかるのが難点。
今回の主な変更点は、リモートPCが作成した共有ファイルのインデックスをネットワーク越しに利用可能になったこと。これにより、リモートPC上のファイルも素早く検索できるようになった。
窓の杜 - 【NEWS】MS、デスクトップ検索ソフト「Windows Search」v4.0を正式公開
どうやって使うのかわからんが、とりあえず検索先のPCにもインストールしてみようかな。
追記
Windows SearchでUNCのパスを追加(d:id:gae:20081219:1229691682)することができたので、ネットワーク上のPCにWindows Searchをインストールする必要はなさそう。
で、インデックスを作成したのなら scope は外した方が汎用的で便利そう。scopeの代わりにsubQueryで以下の用に指定すればインデックスされたファイルのみが検索されるみたい?
<subQueries> <subQuery knownSearch="{4f800859-0bd6-4e63-bbdc-38d3b616ca48}"/> </subQueries>