ssCAROのブログ

色んなとこで見つけたプログラムのメモ置き場っぽい

ログファイルを削除するためのスクリプト(VBS)

ログファイルを定期的に削除したい。
専用アプリを作成してまで削除するのもどうかと思ったのでスクリプト(VBScript)で実行することにした。

ログファイルの削除は、ファイル名に日付が入っているので、ファイル名の日付で削除する。

実行は、タスクスケジューラを使用する。
VBSのまま、タスクスケジューラに登録しても実行されないので、batファイルからVBSを実行するようにする。

DELETE_TASK.bat

CScript C:\HOGE_HOGE\TASK\DELETE_FILE.vbs

DELETE_FILE.vbs

Dim targetPath

'削除対象のフォルダ
targetPath = "C:\HOGE_HOGE\LOG\"

'3年前のファイルを削除する
Call DeleteFile(targetPath, 3)

WScript.Quit

'ログ用フォルダにhoge_yyyymmdd.logのファイルがある
Sub DeleteFile(folderPath, deleteYear)

    Dim fso
    Dim files
    Dim file
    Dim deleteDate
    Dim temp

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set files = fso.GetFolder(folderPath).Files

    'n年前のファイルを削除する
    deleteDate = DateAdd("yyyy", -deleteYear, Date)

    'フォルダ内のファイルを列挙
    For Each file In files
        '拡張子がlogファイルのみを削除対象とする
        If Right(file.Name, 4) = ".log" Then
            '"hoge_yyyymmdd.log"を"yyyy-mm-dd"の書式に変換
            temp = Mid(file.Name, 6, 8)
            temp = Left(temp, 4) & "-" & Mid(temp, 5, 2) & "-" & Right(temp, 2)
            If IsDate(temp) = True Then
                If CDate(temp) < deleteDate Then
                    file.Delete(True)
                End If
            End If
        End If
    Next

    Set file = Nothing
    Set files = Nothing
    Set fso = Nothing

End Sub

'日付(yyyymm)フォルダが作成され、そのフォルダ内にログファイルがある
'日付フォルダごと削除する
Sub DeleteFile2(folderPath, deleteYear)

    Dim fso
    Dim folders
    Dim folder
    Dim deleteDate
    Dim temp

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set folders = fso.GetFolder(folderPath).SubFolders

    'n年前のファイルを削除する
    deleteDate = DateAdd("yyyy", -deleteYear, Date)

    'フォルダ内のフォルダを列挙
    For Each folder In folders
        '"yyyymm"を"yyyy-mm-dd"の書式に変換
        temp = Left(folder.Name, 4) & "-" & Right(folder.Name, 2) & "-01"
        If IsDate(temp) = True Then
            If CDate(temp) < deleteDate Then
                folder.Delete(True)
            End If
        End If
    Next

    Set folder = Nothing
    Set folders = Nothing
    Set fso = Nothing

End Sub