概要

各種ログファイルを一定期間保存する処理について、 処理パターンを分類して管理方法を整理する。

共通前提
ログファイルが、%LOG%\log.txt に毎日出力されるとする。 これを、%OLDLOG% ディレクトリに保存する。
機能別/日時を得る手段によって、YYYYMMDD や YYYYMM という環境変数に 年月日などがセットされているものとする。
処理日の前日の日付を使うなら、機能別/日時計算によって前日日付を求めて YYYYMMDD にセットする。

世代番号管理

保存ログファイルに一連番号をつけ、一定世代(NMAX)を超えたものは削除する。 一世代前のログファイルは log1.txt、二世代前は log2.txt 等とする。

set NMAX=30
for /l %%N in (%NMAX%,-1,2) do call :shift %%N
move "%LOG%\log.txt" "%OLDLOG%log1.txt"
goto :eof
:shift
set /a L=%1-1
if exist "%OLDLOG%\log%L%.txt" move /y "%OLDLOG%\log%L%.txt" "%OLDLOG%\log%1.txt"
goto :eof

日付ファイル名での一定日数保存(世代管理)

保存ログのファイル名は、logYYYYMMDD.txt のように年月日をつける。 一定日数(NMAX)保存し、それを超えたものは削除する。

set NMAX=90
move "%LOG%\log.txt" "%OLDLOG%\log%YYYYMMDD%.txt"
for /f "skip=%NMAX% delims=" %%F in ('dir /b /o-n "%OLDLOG%\log????????.txt"') do del "%%F"

日付ファイル名でのnヶ月保存

保存ログのファイル名は、logYYYYMMDD.txt のように年月日をつける。 Nヶ月保存し、それを超えたものは削除する。

set N=3
move "%LOG%\log.txt" "%OLDLOG%\log%YYYYMMDD%.txt"
set /a M=1%YYYYMMDD:~4,2%-100
if %M% gtr %N% (set /a OLD=YYYYMMDD-N*100) ELSE (set /a OLD=YYYYMMDD-10000+1200-N*100)
for %%F in ("%OLDLOG%\log????????.txt") do if %%~nF leq log%OLD% del "%%F"

ここでは、N は12以下とした。13ヶ月以上の場合は、年と月に分けて、 それぞれ引き算するとよいだろう。

日付ファイル名でのnヶ月保存(年月ディレクトリ管理)

保存ログのファイル名は、logYYYYMMDD.txt のように年月日をつける。 %OLDLOG% の下に %YYYYMM% のディレクトリを作ってそこに保存し、 Nヶ月経ったらディレクトリごと削除する。

set N=3
if not exist "%OLDLOG%\%YYYYMM%\*" md "%OLDLOG%\%YYYYMM"
move "%LOG%\log.txt" "%OLDLOG%\%YYYYMM%\log%YYYYMMDD%.txt"
set /a M=1%YYYYMM:~4,2%-100
if %M% gtr %N% (set /a OLD=YYYYMM-N) ELSE (set /a OLD=YYYYMM-100+12-N)
if exist "%OLDLOG%\%OLD%\*" rd /s /q "%OLDLOG%\%OLD%"

ここでは、N は12以下とした。13ヶ月以上の場合は、年と月に分けて、 それぞれ引き算するとよいだろう。



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-05-05 (木) 03:48:41 (7142d)