フォルダのファイル数を一定に保つため古いファイルを別フォルダに自動移動させる

2015年2月11日水曜日

PC

t f B! P L
防犯カメラの録画を1時間ごとにスタートストップすることで録画ファイルを作成しています。

フォルダが一杯になる前に、別の保管用のストレージに古い時刻のファイルを移動させたい。

方法1: forfilesを使う

こちらのforfillesの説明を参照。

forfiles /p e:\ScreenShot /m *.png /d -3 /c "cmd /c move @file \idou"
で、ScreenShotフォルダのうち、拡張子がpngのファイルで3日より前のものが、idouフォルダへ移動。 ということになります。

方法2: forコマンドを使う

こちらは日にちではなく、ファイルの本数での判定。

for /f "skip=30" %%a in ('dir /b /o-d *.mp4') do move %%a e:\t2

フォルダ内の拡張子MP4ファイルのうち、30個(30時間の録画分)を残して31時間以前の古いファイルをEドライブのt2フォルダにに移動。 という内容です

タスクスケジューラで一定時間(30分とか)ごとに実行すれば、録画フォルダは一杯になりません。

内容説明

説明しやすいように上とは少し内容を変え

for /f "skip=5" %%a in ('dir /b /o-d *.jpg') do move %%a e:\t2

とします

dir /b /o-d *.jpgの部分は対象のパターンを示します

単純にdir とすると



dir *.jpgとすると、拡張子jpgのみ表示



dir /o-d *.jpg とすると、/oでソート指定となり、dをつけることで日付順に並べ替えます。 dの前に -  をつけて逆順にソートしています。

結果、新しいファイルが上に、古いファイルは下に表示されます。



dir /b /o-d *.jpg と、 /b を追加することでファイル名(とフォルダ名)だけを表示します。



ここまでが、forコマンドの対象ファイルを抽出する作業。

forコマンドで、inのパターンを読み取ってdo以降を実行します。

doは、move %%a e:\t2 ですので、inで列挙されたファイルを、e:t2フォルダに移動します

/f の後ろの skip=5 は最初の5行(ソートされたjpgファイルの上から5個)は対象外とすることを示します。

つまり、 inでファイルを新しい日付順にソートし、 doでmoveを使ってファイルをe:\t2に移動。 但し、skipで対象としないファイル5個を指定しているので、5個を超えた古いファイルだけがmoveされる。

元のフォルダ内



実行すると

元のフォルダは



移動先のt2フォルダは



となります。

日時の新しい5個のファイルは元フォルダに残って、古いjpgファイルがt2フォルダに移動します。

移動ではなく削除したい時は

move %%a e:\t2 を del %%a にすれば、古いファイルを削除します。
スポンサーリンク

このブログを検索

QooQ