• ベストアンサー

(Windows)ログファイルのローテーション

バッチファイルから出力されるエラーメッセージを日付を付けて保存しており、30日前の古いログファイルを例えばATコマンドで定期的に削除するバッチファイルの作成を考えています。 UNIXであれば、FINDコマンドでxx日前のファイルをリストアップすることが可能かと思いますが、Windowsの場合はどうなるのでしょうか。 何かいい方法があればご教授頂ければと思います。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

バッチではなく VBScript や JScript なら COM オブジェクトの FileSystemObject を利用できます。 --------------------------------------------- Option Explicit On Error Resume Next ' エラーが起きても止めない ' 対象フォルダのパス Dim targetDir targetDir = "D:\DBMSSQL\LOG\" ' 削除対象の日付(今日の 30日前) Dim cutOff cutOff = DateAdd("d", -30, Now()) Dim fso Set fso = Createobject("Scripting.FileSystemObject") ' 対象フォルダを Folder オブジェクトで取得する Dim aDirObject Set aDirObject = fso.GetFolder(targetDir) ' 対象フォルダの中の全てのファイルの Dim aFileObject For Each aFileObject In aDirObject.Files   ' 拡張子が ".log" のファイルを対象にする   If Right(aFileObject.Name, 4) = ".log" Then     ' 削除対象日付よりも前に作成されたファイルを対象にする     If aFileObject.DateCreated < cutOff Then       ' ファイルを削除する       aFileObject.Delete     End If   End If Next --------------------------------------------- これを定期的に実行するってのはどうでしょうか? 上記コードで字下げしている部分は全角スペースで字下げしていますので、実際に試す場合は半角スペースに置換してください。 VBScript のリファレンス http://msdn.microsoft.com/library/ja/script56/html/vbscripttoc.asp FileSystemObject のリファレンス http://msdn.microsoft.com/library/ja/script56/html/fsooriScriptingRun-TimeReference.asp

その他の回答 (1)

  • rinta44
  • ベストアンサー率69% (30/43)
回答No.1

役に立つか分かりませんが、WindowsにもFindコマンドはあります。但し、UNIXのFindと一緒かは分かりませんが。 ご存知でしたら申し訳ありません。 ----------------------------------- >Find /? ファイル (複数可) 内のテキスト文字列を検索します。 FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "文字列" [[ドライブ:][パス]ファイル名[...]] /V 指定した文字列を含まない行をすべて表示します。 /C 指定した文字列を含む行の数だけを表示します。 /N 行番号を表示します。 /I 大文字と小文字の区別をしないで検索します。 /OFF[LINE] オフライン属性が設定されたファイルをスキップしません。 "文字列" 検索する文字列を指定します。 [ドライブ:][パス]ファイル名 検索するファイル (複数可) を指定します。 パスが指定されていないときは、プロンプトで入力されたテキストまた は別のコマンドからパイプ処理で渡されたテキストを検索します。

rere2006
質問者

補足

確かにWindowsにもFINDコマンドはありますが、どちらかというと文字列の検索となっており、UNIXのように何日前のファイルを検索出来るかどうかが分かりません。。。

関連するQ&A