FileRotate.bat
Windowsのバッチファイルでログ等のファイルをファイルサイズによりローテートするプログラムです。仕様はプログラム中のコメントに記載しています。
※本記事ではファイルサイズの判定についてのみ説明し、ファイルのローテートについて「ログ等のファイルをローテートする」をご参照ください。
実行に必要なバッチファイル(GitHub)
処理抜粋
ファイルサイズの判定部分を抜粋しています。
set BAT_FILEROTATE=FileRotate.batのパス set FILE_PATH=ファイルパス set MAX_BACKUP_NUMBER=バックアップ世代数の上限値 set MAX_BYTESIZE =ファイルのバイト数上限 for %%i in ("%FILE_PATH%") do ( if %%~zi gtr %MAX_BYTESIZE% ( call %BAT_FILEROTATE% "%FILE_PATH%" %MAX_BACKUP_NUMBER% ) )
実行例
call FileRotateSize.bat 対象ファイルパス バックアップ世代数上限 バイト数上限 call FileRotateSize.bat "C:¥log¥error.log" 5 1000000
引数に指定したファイルがバイト数上限より大きい場合にローテートをします。ローテートされた一番古いファイルがバックアップ世代数上限まで達するとそのファイルを削除します。
実行前のファイル
C:¥log¥error.log C:¥log¥error.log.1 C:¥log¥error.log.2
実行後のファイル
C:¥log¥error.log.1 C:¥log¥error.log.2 C:¥log¥error.log.3
FileRotateSize.bat
@setlocal enabledelayedexpansion @echo off rem ****************************************************************** rem * FileRotateSize.bat: ファイルサイズによるファイルローテート rem * rem * [説明] rem * ファイルのバイト数が上限値より大きい場合、ローテートする。 rem * rem * <仕様・ルール> rem * ・ファイルに対してのみローテートする rem * ・ローテートする対象が存在しない場合、何もしない rem * ・ファイルのバイト数の上限は1以上を指定する rem * ・バックアップ世代数など基本的な仕様はFileRotate.batに準ずる rem * rem * [引数] rem * %1: ローテートするファイル(必須) rem * %2: バックアップ世代数の上限(必須) rem * %3: ファイルのバイト数上限 rem * rem * [バージョン] rem * 1.0.0 rem ****************************************************************** rem echo FileRotateSize %1 %2 %3 rem 利用する外部バッチファイル set BAT_FILEEXISTS="%~dp0\FileExists.bat" set BAT_ISINTEGER="%~dp0\IsInteger.bat" set BAT_FILEROTATE="%~dp0\FileRotate.bat" set FILE_PATH=%~1 set MAX_BACKUP_NUMBER=%2 set MAX_BYTESIZE=%3 rem 引数チェック(引数が不正の場合、8を返す) if not defined FILE_PATH ( endlocal exit /b 8 ) rem ファイルのバイト数上限の数字判定 call %BAT_ISINTEGER% %MAX_BYTESIZE% if %ERRORLEVEL% neq 0 ( endlocal exit /b 8 ) rem ファイルのバイト数上限は1以上を指定する if %MAX_BYTESIZE% lss 1 ( endlocal exit /b 8 ) rem ローテートするファイルが存在しない場合、1を返す call %BAT_FILEEXISTS% "%FILE_PATH%" if %ERRORLEVEL% neq 0 ( endlocal exit /b 1 ) rem ファイルのバイト数が上限値より大きい場合、ローテートする for %%i in ("%FILE_PATH%") do ( rem echo %%~zi if %%~zi gtr %MAX_BYTESIZE% ( call %BAT_FILEROTATE% "%FILE_PATH%" %MAX_BACKUP_NUMBER% if !ERRORLEVEL! neq 0 ( endlocal exit /b !ERRORLEVEL! ) ) ) endlocal exit /b 0