特定のフォルダ以下に保存されているフォルダのうち、一定期間が経過したフォルダだけを自動で削除したい、といった要望がありましたので、バッチファイルとタスクスケジューラを利用して行う方法を提案しました。
バッチファイルは次のようになります。
@echo off
set folder_path=C:\test\testfolder
set days=30
forfiles /p %folder_path% /s /d -%days% /c "cmd /c if @isdir==TRUE rd /s /q @path"
簡単に解説すると、1行目はバッチファイルの実行時にコマンドが表示されなくなる指定。2行目と3行目は、削除対象のフォルダのパスと日数を変数に代入。
4行目で、指定したフォルダ内のフォルダを検索し、指定した期間以上経過したフォルダを削除します。肝心のforfilesコマンドのオプションの意味を次の通り。
/p %folder_path% 検索対象となるフォルダのパスを指定します。%folder_path%は、変数として定義されたフォルダのパスです。
/s サブフォルダも対象にします。
/d -%days% dオプションは、指定した日数よりも古いものを検索します。-%days%は、変数として定義された日数の値を負の数で指定します。つまり、指定した日数以上経過したフォルダを検索することになります。
/c “cmd /c if @isdir==TRUE rd /s /q @path” cオプションは、検索結果に対して実行するコマンドを指定します。ここでは、cmd /c if @isdir==TRUE rd /s /q @pathというコマンドを実行します。
cmd /c コマンドプロンプトを起動してコマンドを実行することを指定します。
if @isdir==TRUE @isdirは、現在処理中のファイルがフォルダであるかどうかを判定するための変数です。この条件式は、処理中のファイルがフォルダである場合に真となります。
rd /s /q @path rdコマンドは、フォルダを削除するためのコマンドです。/sオプションは、サブフォルダとその中のファイルも再帰的に削除することを指定します。/qオプションは、確認メッセージを表示せずに削除を実行することを指定します。@pathは、現在処理中のファイルのパスを指定します。
このバッチファイルを保存し、後はタスクスケジューラでバッチファイルを指定すれば、定期的に古いフォルダを削除出来るようになります。