Войти

Показать полную графическую версию : Удаление старых бэкапов по маске, оставляя нужное их количество.


Slavyan_d
25-12-2019, 11:52
Помогите создать скрипт (батник). Задача:
есть папка Backup. в ней еще несколько папок куда сбрасываются бэкап файлы с расширением .bak
нужно раз в день удалять старые файлы (всех расширений) из всех папок, оставляя в каждой папке только 3 последних и только с расширением .bak

Iska
25-12-2019, 20:27
только 3 последних »
Начните с определения «3 последних файла .bak» — последних по времени создания или по времени последней модификации?

DJ Mogarych
25-12-2019, 20:42
Powershell, фильтр по времени создания

del c:\backup\* -Exclude "*.bak" -Recurse -Force -Confirm:$false
foreach ($dir in (gci c:\backup -Directory -recurse).fullname) {
gci "$dir\*.bak" |sort creationtime |select -SkipLast 3 |del -Force -Confirm:$false
}

megaloman
25-12-2019, 22:07
@Echo Off
Set "Fold=Z:\Backup"
Set "Mask=*.bak"
Set /A N=3

Call :MyDel "%Fold%\" "%Mask%" %N%
FOR /F "usebackq delims=" %%d IN (`2^>nul Dir "%Fold%" /S /B /A:D`) Do Call :MyDel "%%d\" "%Mask%" %N%
Exit /B 0

:MyDel
FOR /F "usebackq skip=%3 delims=" %%i IN (`2^>nul Dir "%~1\%~2" /B /O:-D /A:-D`) DO Del "%~1%%i"
FOR /F "usebackq delims=" %%i IN (`2^>nul Dir "%~1\*.*" /B /O:-D /A:-D`) DO If /I Not "%%~xi"=="%~x2" Del "%~1%%i"
Exit /B




© OSzone.net 2001-2012