Сегодня хочу показать вам очередной простенький скрипт. На этот раз это – bat скрипт для ротации логов, да в общем то и не только логов, а в принципе любых файлов. Автоматическое переименование и удаление осуществляется, если файл достигнет заданного размера.
Текст скрипта:
@echo off
set file=query.log
set path="c:\logs\"
set maxbytesize=268436480
set filescount=7
cd %path%
for /F "usebackq" %%A in ('%file%') do set size=%%~zA
if %size% LSS %maxbytesize% (
echo "we should do nothing"
) else (
setlocal ENABLEDELAYEDEXPANSION
set /a j=%filescount%-1
del /f /q %file%.%filescount%
for /l %%i in (!j!,-1,0) do (
set /a k=%%i+1
ren %file%.%%i %file%.!k!
)
endlocal
ren %file% %file%.0
)
Принцип работы предельно прост – мы задаем имя файла, путь до него, максимальный размер, при достижении которого будет осуществлено переименование, а также количество архивных файлов.
Далее мы смотрим размер файла. Если он окажется больше заданного нами, то переименовываем его, а также все архивные файлы, самый старый файл – удаляется, если количество файлов равно заданному нами.
В принципе тут всё просто, но обратите внимание на переменную ENABLEDELAYEDEXPANSION, если ее не задать, то в цикле будут невозможны операции с переменными.
Надеюсь скриптик окажется вам полезным.
