Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Удаление старых файлов по дате (маске) (http://forum.oszone.net/showthread.php?t=283894)

cons74 20-06-2014 09:35 2366431

Удаление старых файлов по дате (маске)
 
Добрый день.

Есть батник для создания бекапов sql. (брал здесь на форуме)
Создаются полные, диффы и логи. Затем подсчитывается число файлов в папке и удаляются старые кроме последних 40.
читать дальше »
Код:

@echo off

setlocal enableextensions enabledelayedexpansion
chcp 1251
rem ---папка для очистки; обрамление через chcp чтоб консоль приняла русский---
set sFolder=F:\Архив1С\БАЗЫ\БитФинанс\Backups
chcp 866

rem ---кол-во файлов, оставляемых в папке
rem расчет: 1*неделя + 1*день дифф + 2*день лог= в неделю 14+7+1=22 файла в неделю
set /a iCount = 44

for /f "skip=%iCount% usebackq delims=" %%i in (
        `dir /b /a:-d /o:-d /t:w "%sFolder%"`
) do del /f /q "%sFolder%\%%~i"

endlocal

exit /b 0



Требуется: если удален полный бекап - удалять все диффы м/у ним и следующим полным.

megaloman 20-06-2014 10:31 2366452

cons74, как-то замудрёно получается. Непонятно: Затем подсчитывается число файлов в папке и удаляются старые кроме последних 40.
Зачем нужен этот подсчет? Правильно ли я понимаю: bitFinance_full*.bak - это основной бэкап, а всё остальное- дополнение к нему? Без основного бэкапа они не имеют смысла? Тогда идея простого решения - задаём, сколько фулл-бэкапов оставить, определяем имя последнего из оставляемых бэкапов, удаляем все, сделанное позже (сортировку по времени создания делает Dir)
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

rem ---папка для очистки;
set sFolder=F:\Архив1С\БАЗЫ\БитФинанс\Backups

rem iCount - число полных оставляемых бэкапов
set /a "iCount=14"

rem префикс полного бэкапа
set "Pref=bitFinance_full_"

rem расширение полного бэкапа
set "Ext=.bak"

Set /a N=%iCount%-1

Set File=""
for /f "skip=%N% usebackq delims=" %%i in (`dir /b /a:-d /o:-d /t:w "%sFolder%\%Pref%*%Ext%"`) do (
        Set File=%%i
        GoTo :Continue
)
:Continue

Set "L=0"
for /f "usebackq delims=" %%i in (`dir /b /a:-d /o:-d /t:w "%sFolder%"`) do (
        If !L!==1 del /f /q "%sFolder%\%%i"
        If "%%i"=="%File%" Set "L=1"
)


cons74 23-06-2014 08:00 2367359

Цитата:

Цитата megaloman
Затем подсчитывается число файлов в папке и удаляются старые кроме последних 40. »

Я ж писал: это было сделано ДО того, как заметил, что
Цитата:

Цитата megaloman
bitFinance_full*.bak - это основной бэкап, а всё остальное- дополнение к нему? Без основного бэкапа они не имеют смысла? »

Надо было по-быстрому как-то ограничить рост бекапов - вот и нашел тут батник.

В общем, Вы все правильно поняли, большое спасибо.


Время: 01:17.

Время: 01:17.
© OSzone.net 2001-