PowerShellで目的の時刻のファイルを削除

すでに販売してないでしょうが、東芝のTranscubeLink ってハードディスクビデオを持ってまして、こいつは録画した内容をMPEG2ファイルとしてPCにダウンロードする事ができます。で撮り溜めてはUWSCLink を使って自動でPCに移動、時間があったら見ようと思ってたら結構たまってしまいました orz

そのうち毎週録画していた番組がすでに最終回を迎えていたにもかかわらず録画し続けたものが結構増え、これを一気に削除したいなと。Transcubeのプログラムをアップデートするとファイル名が番組のタイトルになるという機能が付くのですが、これで自動ダウンロードをすると毎週録画の番組は古いファイルが上書きされてしまうため、あえて無意味な英数字の羅列がファイル名になる状態で使用してました。よってファイル名で削除する方法は使えず。

削除したいMPEGファイルの共通点は時刻。録画終了時刻がファイルの作成時刻になっているため、これを使えば確実に目的のファイルを選び出せます。しかし共通しているのは時刻だけで、日付は曜日以外に共通性なし。こういう時PowerShellだと以下のようにできます。
dir *.mpg | where {$_.LastWriteTime.Hour -eq 21 -and $_.LastWriteTime.Minute -eq 54 -and $_.LastWriteTime.DayOfWeek -eq 0} | del
dirコマンドで拡張子mpgを持つファイルのオブジェクト(System.IO.FileInfo)配列を作成、次のwhereでそのオブジェクトのLastWriteTimeが日曜日21:54になっているものだけを抜き出し、delコマンドで削除します。whereコマンドの指定が正しいか確認したい場合、最後のdelコマンドを打たなければdirコマンドの様に選ばれたファイルのリストが表示されます。

分かっている人には当たり前の内容ですね。UNIXでもPerlとか使えば可能でしょうがこちらの方がスマートですし、これが.NETというVisual StudioやASP.NETなどと同じ基盤を背景にして実行されているというのが興味深い。私としてはWindowsって95のころはつまらなかったのですが、バージョンが進むごとに面白くなってしょうがないです。でも7はVistaとほとんど変わりなしみたいで、つまらなさそうw

[2011/4/7 追記] アクセスログを見ると最も古いファイルを消すという内容で検索が入ってました。以下のでどうでしょう?
(dir | where {$_ -is [System.IO.FileInfo]} | sort LastWriteTime)[0] | del
(dir | where {$_ -is [System.IO.FileInfo]} | sort LastWriteTime)[0..2] | del
(dir | where {$_ -is [System.IO.FileInfo]} | sort LastWriteTime)[0,2,4] | del
2行目は最も古いのから3つ、3行目は最古・3番目・5番目(どういう状況だ?)を削除。便利だ。

— posted by mu at 09:07 pm   commentComment [0]  pingTrackBack [0]

T: Y: ALL: Online:
ThemeSwitch
  • Basic
Created in 0.0093 sec.
prev
2009.2
next
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28