フォルダが一杯になる前に、別の保管用のストレージに古い時刻のファイルを移動させたい。
方法1: forfilesを使う
こちらのforfillesの説明を参照。
forfiles /p e:\ScreenShot /m *.png /d -3 /c "cmd /c move @file \idou"
で、ScreenShotフォルダのうち、拡張子がpngのファイルで3日より前のものが、idouフォルダへ移動。 ということになります。
方法2: forコマンドを使う
こちらは日にちではなく、ファイルの本数での判定。
フォルダ内の拡張子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フォルダに移動します。