Let's consider the permanently growing file of some application named as
something.logand we'd like to keep records in this file for the long time as much as possible. But for some reason this file is cleaning up periodically or a size of the file affects on the application's performance.
The recent records are available from the file
something.logand the previously saved records are available under the name
something.log.1, etc until the
something.log.5. After the following rotation the content of the last file will be lost and replaced by the content of the previous file (
something.log.4will be copied to the
something.log.5) and the first file
something.logwill be copied to the
something.log.1. At the same time the
something.logwill be truncated.
rotate something.log 10If you'd like to increase the rotation length you can pass the additional numeric parameter to change it. The example above shows how to modify the length of the rotation until 10.
@echo off if "%~1" == "" goto help if /i "%~1" == "/h" goto help setlocal if not "%~2" == "" set /a rotate_n=%~2 2>nul if not defined rotate_n set rotate_n=5 if %rotate_n% lss 5 set rotate_n=5 :: set rotate_c=copy /y set rotate_0=copy nul set rotate_c=move /y set rotate_i=%rotate_n% :loop_redo set /a rotate_i-=1 if %rotate_i% == 0 goto loop_break if exist "%~1.%rotate_i%" %rotate_c% "%~1.%rotate_i%" "%~1.%rotate_n%" set /a rotate_n-=1 goto loop_redo :loop_break %rotate_c% "%~1" "%~1.1" && %rotate_0% "%~1" endlocal goto :EOF :help echo.Usage: echo. %~n0 FILENAME [NUMBER] goto :EOF