Windows bat: バイト数の上限を超えたファイルをローテートする

FileRotate.bat
Windowsのバッチファイルでログ等のファイルをファイルサイズによりローテートするプログラムです。仕様はプログラム中のコメントに記載しています。
※本記事ではファイルサイズの判定についてのみ説明し、ファイルのローテートについて「ログ等のファイルをローテートする」をご参照ください。

処理抜粋

ファイルサイズの判定部分を抜粋しています。

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