Windowsバッチで古いファイルを削除する方法

2018.5.6

概要

windows のバッチファイルで「10 日以上経過したファイルを削除したい」を実現する方法を紹介します。

古いログファイルやバックアップデータの削除に役立つのではないでしょうか。

更新日が n 日以上

forfiles /p c:\path\to\file /d -3 /m "*.txt" /c "cmd /c del @file"

/p c:\path\to\fileは forfiles でサーチする対象ディレクトリを表しています。

/d -7は 7 日前を表しています。

/m "*.txt"は検索パターンを表していて、拡張子が.txt のファイルが対象になります。

/c "cmd /c del @file"はマッチしたファイルに対して実行するコマンドを表しています。この場合は、一致したファイルを削除するコマンドになっています。

動作確認

動作確認する方法を紹介します。

やることは下記のようになります。

テスト用に空ファイルを作る

まずは、7 日分のファイルを作成します。

コマンドプロンプトを起動して下記のコマンドを実行すると、7 つの空ファイルが作成されます。

copy nul 1.txt
copy nul 2.txt
copy nul 3.txt
copy nul 4.txt
copy nul 5.txt
copy nul 6.txt
copy nul 7.txt

ファイル名は何でも OK です。

テスト用ファイルのタイムスタンプを変更

次にファイルのタイムスタンプを 7 日分に合わせて変更します。

windows ではパワーシェルを使う必要があります。

パワーシェルは「ファイル名を指定して実行」を起動して、powershellと入力してエンターで起動することができます。

「ファイル名を指定して実行」は[win]+[r]のショートカットキーで起動するのが簡単です。

2018/01/1の部分をテストしたい日付に合わせて変更してください。

Set-ItemProperty "1.txt" -Name LastWriteTime -Value "2018/01/1 00:00:00"
Set-ItemProperty "2.txt" -Name LastWriteTime -Value "2018/01/2 00:00:00"
Set-ItemProperty "3.txt" -Name LastWriteTime -Value "2018/01/3 00:00:00"
Set-ItemProperty "4.txt" -Name LastWriteTime -Value "2018/01/4 00:00:00"
Set-ItemProperty "5.txt" -Name LastWriteTime -Value "2018/01/5 00:00:00"
Set-ItemProperty "6.txt" -Name LastWriteTime -Value "2018/01/6 00:00:00"
Set-ItemProperty "7.txt" -Name LastWriteTime -Value "2018/01/7 00:00:00"

テストしてみる

実際に確認するために削除用のコマンドを実行します。

forfiles /p c:\path\to\file /d -3 /m "*.txt" /c "cmd /c del @file"

c:\path\to\fileの部分と/d -3の部分を想定している値に変更して実行してみてください。

想定した日数以上古いファイルが削除されていれば成功です。