【AutoIt】古いログファイルを一括削除して PC をクリーンアップ!

アプリケーションやシステムが自動で生成するログファイル(拡張子「.log」)。これらは問題発生時には役立ちますが、放置しておくとどんどん溜まっていき、ディスクスペースを圧迫する原因になります。

今回は、AutoIt を使って指定した日数より古いログファイルを一括で検索し、自動で削除するお掃除スクリプトを紹介します。

これをタスクスケジューラに登録しておけば、定期的に PC をクリーンな状態に保つことができます。

目次

スクリプトの概要

このスクリプトは、指定されたフォルダー内を再帰的に(サブフォルダーの奥深くまで)検索し、「.log」という拡張子を持つファイルを見つけます。

そして、そのファイルの最終更新日時をチェックし、設定した日数(例:30日)より古い場合、ファイルを自動的に削除します。

サンプルコード

#include <File.au3>
#include <Date.au3>
#include <MsgBoxConstants.au3>
; ### 設定項目 ###
; 検索を開始するフォルダーを指定します。
Local $sTargetFolder = @WindowsDir & "\Temp" ; 例としてWindowsのTempフォルダーを指定
; ここで指定した日数より古いファイルを削除します。
Local $iDaysOld = 30
; 削除対象のファイルの拡張子を指定します。
Local $sFileExtension = ".log"
; ### メイン処理 ###
; 削除したファイル数をカウントするための変数を初期化します。
Local $iDeletedCount = 0
; 指定されたフォルダー内にある、対象拡張子のファイルリストを再帰的に取得します。
Local $aFileList = _FileListToArrayRec($sTargetFolder, "*" & $sFileExtension, $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_SORT)
; ファイルが見つからなかった場合のエラー処理です。
If @error Then
    MsgBox($MB_ICONINFORMATION, "情報", "対象のファイルは見つかりませんでした。")
    Exit
EndIf
; Forループを使って、見つかったファイルを一つずつチェックします。
For $i = 1 To $aFileList[0]
    ; ファイルのフルパスを取得します。
    Local $sFilePath = $aFileList[$i]
    ; ファイルの最終更新日時を取得します。
    Local $aFileTime = FileGetTime($sTargetFolder & "\" & $sFilePath, $FT_MODIFIED)
    ; 取得した日時データを使って、今日との差分日数を計算します。
    Local $iDateDiff = _DateDiff('D', $aFileTime[0] & "/" & $aFileTime[1] & "/" & $aFileTime[2], @YEAR & "/" & @MON & "/" & @MDAY)
    ; もし差分日数が設定した日数以上なら、ファイルを削除します。
    If $iDateDiff >= $iDaysOld Then
;~         FileDelete($sTargetFolder & "\" & $sFilePath)
        ConsoleWrite($sTargetFolder & "\" & $sFilePath & @CRLF); 確認のため FileDelete をコメントアウトして ConsoleWrite に変更しています。
        ; 削除カウンターを1増やします。
        $iDeletedCount += 1
    EndIf
Next
; 処理が完了したことをメッセージで伝えます。
MsgBox($MB_OK, "完了", $iDeletedCount & "個の古い" & $sFileExtension & "ファイルを削除しました。")

コードの詳しい解説

#include から始まる行

File.au3はファイルリスト取得、Date.au3は日付計算、MsgBoxConstants.au3はメッセージボックス表示のために、それぞれ必要な関数群を読み込んでいます。

設定項目

Local $sTargetFolder = @WindowsDir & "\Temp"
Local $iDaysOld = 30
Local $sFileExtension = ".log"

この3つの変数を変更することで、スクリプトの動作をカスタマイズできます。

  • $sTargetFolder: どのフォルダーを掃除の対象にするか指定します。@WindowsDir & "\Temp"はWindowsの一時フォルダーを指定するマクロです。自分のドキュメントフォルダーなどに変更することも可能です。
  • $iDaysOld: 何日以上前のファイルを削除対象とするかを数値で指定します。
  • $sFileExtension: 削除したいファイルの拡張子を指定します。「.tmp」や「.bak」など、不要なバックアップファイルを対象にすることもできます。

_FileListToArrayRec(…)

指定したフォルダー($sTargetFolder)とそのサブフォルダー全てを対象に、指定したパターン("*.log")に一致するファイルを検索し、リストを配列として取得します。RecはRecursive(再帰的)の略で、これがサブフォルダーまで検索してくれる重要なポイントです。

FileGetTime(…)

ファイルのタイムスタンプを取得する関数です。第二引数の$FT_MODIFIEDで「最終更新日時」を指定し、第三引数の$FT_ARRAYで結果を年、月、日などの要素に分かれた配列として受け取ります。

_DateDiff(‘D’, …)

2つの日付の差分を計算する、非常に強力な関数です。

_DateDiff(‘D’, 開始年, 開始月, 開始日, 終了年, 終了月, 終了日)のように使います。

ここでは、ファイルの更新日時から今日までの差分を**日数(’D’)**で計算しています。

If $iDateDiff >= $iDaysOld Then …

_DateDiffで計算した経過日数が、設定項目で指定した$iDaysOld(例:30日)以上かどうかを判定しています。条件に一致した場合のみ、次の行のFileDelete()が実行されます。

FileDelete($sFilePath)

指定されたパスのファイルを削除する、シンプルで強力な関数です。この関数で削除したファイルはごみ箱には入らず、直接削除されるので、対象フォルダーの指定には注意してください。

まとめ

このスクリプトは、一度設定してしまえば、あとは実行するだけで PC のメンテナンスが完了する便利なツールです。

注意点として、重要なファイルを誤って削除しないよう、最初は FileDelete() の行をコメントアウト(行頭に;を付ける)して、どのファイルが対象になるか ConsoleWrite() などで確認しながらテストすることをおすすめします。

安全に注意しながら、ディスクの空き容量確保に役立ててください。

  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次