今日は、batファイルの小技です。
ファイル管理は、ある程度日数が経過した、もしくはファイル数が多くなったら
勝手に消えてほしいファイルってありますよね。
例えば下記のケース
データベースを使用するシステムでは、
ほぼ100%バックアップを取るように言われますが、
永遠にバックアップを保存し続けることはまずありません。
どこかで古いファイルを消す必要がでてきます。
ファイルを削除する場合は、
下記のようなbatを作成して、タスクスケジューラーに登録しておくと便利です。
下記は僕が私的に利用しているbatファイルの一部です。
僕の場合は、最後にデータベースのバックアップコマンドを呼んでいます。
引数を2つ用意していて、経過日数で管理したい場合は1つ目、
ファイル数で管理したい場合は2つ目の引数を入れて実行します。
rem ************************************************
rem ファイルの世代管理を行います。
rem 引数ありの場合、下記のトリガーに応じたファイルの削除を行います。
@echo 引数1:経過日数=(%~1)
@echo 引数2:ファイル数=(%~2)
rem ************************************************
@echo off
rem 対象フォルダパスを設定してください
cd /d {対象フォルダパス}
rem "sample_"から始まるファイルを対象とします
set fileName=sample_*
if not "%~1" == "" (
@echo 引数1の日数が経過したファイルを削除します。※引数1の日数から削除
forfiles /d -%1 /m %fileName% /c "cmd /c del @file"
)
if not "%~2" == "" (
@echo 引数2の個数を超過した場合に古いファイルを削除します。
for /f "skip=%~2" %%a in ('dir /b /o-d %fileName%') do del %%a
)
簡単に説明すると1つ目のif文内では、
引数1の入力があれば、%fileName%に合致する、本日より○日以前(/d -%1)のファイルが削除対象です。
2つ目のif文内では、
引数2の入力があれば、%fileName%に合致する、日付順に降順ソート(/o-d)して○個以降(skip=%~2″)のファイルが削除対象です。
どちらも見る日付フィールドは 最終更新日時 となります。
ただし、dirの引数には日付フィールドを指定するオプションが用意されています。
日付フィールドを指定したい場合は更に↓の引数を足します。
作成日時 | 最終アクセス日時 | 最終更新日時 |
---|---|---|
/TC | /TA | /TW |
おしまい。