2013年3月15日金曜日

ログ削除バッチ

Windowsのコマンドだけを利用して、ある一定期間以前(例えば14日より前)に作成されたログファイルを削除するバッチを作成したので、記載します。
ここでは、下記のようなフォルダ構成になっている場合を想定したバッチファイルを作成しました。

[フォルダ構成]
D:\
 ├ SampleDir
     ├ ProgramA
     │  └ LogFiles
     │
     ├ ProgramB
     │  └ LogFiles
     │
     ├ ProgramC
     │  └ LogFiles

※各LogFilesフォルダ配下に削除対象のログファイルが格納されていることとします。


作成したバッチは、下記の通りとなります。
1.forコマンドで、D:\SampleDir内の全フォルダを対象に処理を行います。
2.forFilesコマンドを使用して、対象のファイルを絞り込みます。
  /P D:\SampleDir\ProgramA\LogFilesを検索対象とします。
  /M 拡張子がlogのファイルを絞り込みます。
  /D 最終更新日が15日以前のファイルを絞り込みます。
  /C 絞り込まれた対象のファイルに対して、コマンドを実行します。
     ここでは、削除コマンドをechoで表示させています。実使用では「echo」部分を削除します。
     @pathには絞り込まれた対象のファイルの完全なパスが格納されています。
  %~nI %Iに格納された完全パスからファイル名(フォルダ名)だけを抽出します。

@echo off

set LOG_FILE=RemoveLog.log
set HOME_DIR=D:\SampleDir
set DAYS=-15


@echo on



set LOG_FILE=RemoveLog.log
set HOME_DIR=D:\SampleDir
set DAYS=-15


echo ログ削除開始 >> %LOG_FILE%
date /t >> %LOG_FILE%
time /t >> %LOG_FILE%

for /D %%I in ( %HOME_DIR%\*.* ) do (
forfiles /P %HOME_DIR%\%%~nI\LogFiles /M *.log /D %DAYS% /C "cmd /c echo del @path" >> %LOG_FILE%
)

echo ログ削除終了 >> %LOG_FILE%
date /t >> %LOG_FILE%
time /t >> %LOG_FILE%

exit