#navi(機能別)
#contents
////////////////////////////////////////////////////////////////////////////
*概要 [#v0276371]
各種ログファイルを一定期間保存する処理について、
処理パターンを分類して管理方法を整理する。

:共通前提|
ログファイルが、%LOG%\log.txt に毎日出力されるとする。
これを、%OLDLOG% ディレクトリに保存する。~
[[機能別/日時を得る]]手段によって、YYYYMMDD や YYYYMM という環境変数に
年月日などがセットされているものとする。~
処理日の前日の日付を使うなら、[[機能別/日時計算]]によって前日日付を求めて
YYYYMMDD にセットする。
////////////////////////////////////////////////////////////////////////////
*世代番号管理 [#tcaca121]
保存ログファイルに一連番号をつけ、一定世代(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
////////////////////////////////////////////////////////////////////////////
*日付ファイル名での一定日数保存(世代管理) [#b56ea92a]
保存ログのファイル名は、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ヶ月保存 [#wc5f1145]
保存ログのファイル名は、logYYYYMMDD.txt のように年月日をつける。
Nヶ月保存し、それを超えたものは削除する。

 set N=3
 move "%LOG%\log.txt" "%OLDLOG%\log%YYYYMMDD%.txt"
 set /a W=1%YYYYMMDD:~4,2%-100
 if %W% gtr %N% (set /a OLD=YYYYMMDD-N*100) ELSE (set /a OLD=YYYYMMDD-10000+1200-N*100)
 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ヶ月保存(年月ディレクトリ管理) [#c7036116]
保存ログのファイル名は、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 W=1%YYYYMM:~4,2%-100
 if %W% gtr %N% (set /a OLD=YYYYMM-N) ELSE (set /a OLD=YYYYMM-100+12-N)
 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ヶ月以上の場合は、年と月に分けて、
それぞれ引き算するとよいだろう。
////////////////////////////////////////////////////////////////////////////
#navi(機能別)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS