Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Новый участник


Сообщения: 3
Благодарности: 1

Профиль | Отправить PM | Цитировать


Удаление архивных файлов в подпапках 1 уровня вложенности в указанной директории
Сохранение только N количесво последних по дате изменения файлов
Например из C:/ARCHIVE/
Структура:

C:/ARCHIVE/User1
C:/ARCHIVE/User1/file1_archive_2008-MM-DD.rar
C:/ARCHIVE/User1/file2_archive_2007-MM-DD.rar
C:/ARCHIVE/User1/file3_archive_2006-MM-DD.rar
C:/ARCHIVE/User2
C:/ARCHIVE/User2/file1_archive_2011-MM-DD.rar
C:/ARCHIVE/User2/file2_archive_2010-MM-DD.rar
C:/ARCHIVE/User2/file3_archive_2009-MM-DD.rar


В результате будут удалены 2 файла:
1) C:/ARCHIVE/User1/file3_archive_2006-MM-DD.rar
2) C:/ARCHIVE/User2/file3_archive_2009-MM-DD.rar


Настраиваемые параметры:
set BackUpFolder=C:/ARCHIVE
set KeepNumFiles=2


Код: Выделить весь код
@echo off
SetLocal EnableExtensions
set BackUpFolder=C:/ARCHIVE
set KeepNumFiles=2
@echo. & @echo Script Start: & @echo.
@rem Get LIST of Directories --------------------------------------------
@pushd %BackUpFolder%>dirs.log 2>&1
find "The system cannot find the path specified." < dirs.log > nul
if errorlevel 1 (
@for /f "tokens=* delims=" %%D in ('dir /ad /b /o-d') do call :FromDir %%D
) else (
@echo Wrong Path %BackUpFolder% in param "BackUpFolder": Location did not find!
@echo Wrong Path %BackUpFolder% in param "BackUpFolder": Location did not find!>>erase_old_files.log
exit
)
@exit /b
@popd

:FromDir
@set NumFiles=%KeepNumFiles%
@set CurrentDir=.\%1
@echo Directory: %CurrentDir%
DIR "%CurrentDir%" /B /A-D /o-d>dirs.log 2>&1

find "File Not Found" < dirs.log > nul
if errorlevel 1 (
@for /f "tokens=* delims=" %%1 in ('DIR "%CurrentDir%" /B /A-D /o-d') do call :CheckFiles %%1
@exit /b
) else (
@echo Directory %1 is EMPTY!
@echo %date% %time%: Script detected, that Folder "%CurrentDir%" is EMPTY!>>erase_old_files.log
@exit /b
)



:CheckFiles
if not %NumFiles%==0 set /a NumFiles-=1&exit /b
@echo File deleted: %1
@echo %date% %time%: erase %CurrentDir%\%1>>erase_old_files.log
erase "%CurrentDir%\%1"
@exit /b
Логи складываются рядом со скриптом в erase_old_files.log

Последний раз редактировалось biossa, 28-09-2011 в 23:18.


Отправлено: 21:31, 28-09-2011 | #8