Windowsバッチファイルでタイムスタンプが古いファイルの削除や移動処理

 バッチ処理を作成していると、意外と処理したくなる古いファイルの削除。バッチ処理で作成したファイルが蓄積されてしまった時に古いファイルは削除が必要となったり。ログファイルなんかが対象になるかもしれません。ログファイルなんかはファイル名に日時情報を入れてファイル名で判別することもあるかもしれませんが、タイムスタンプから判別して削除したいこともあるでしょう。今回はそんな時の処理について書こうかと。

コマンド(forfiles)の説明

 使用するコマンドは「forfiles」というコマンドとなります。このコマンド削除目的以外にも使用でき、ファイルまたは一連のファイルに対してコマンドを実行することができます。詳細は下記のサイトを参考にしてみて下さい。

https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/forfiles

古いファイルの削除例

「D:\log」フォルダにある最終更新日が90日以前で「*.log」でマスク検索されたファイルに対して削除処理を実行。

forfiles /P D:\log /D -90 /M "*.log" /C "cmd /c del @FILE"

古いファイルの移動例

「D:\log」フォルダにある最終更新日が90日以前で「*.log」でマスク検索されたファイルに対して「D:\log\old」へ移動処理を実行。

forfiles /P D:\log /D -90 /M "*.log" /C "cmd /c move @FILE D:\log\old"

その他補足

「forfiles」はファイル名「@FILE」以外にもファイルサイズ「@FSIZE」やファイル最終変更日「@FDATE」のようなものも取得でき、パラメーターで「/S」を指定すればサブディレクトリの検索も可能である。バッチファイルでファイル一覧をテキストに書き出し、それを読み込みしながら実行していた処理を、そんなこともせずに行えてしまいます。

<スポンサーリンク>

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です