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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление старых архивов

Ответить
Настройки темы
CMD/BAT - [решено] Удаление старых архивов

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


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

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


привет.
Ребята прошу помощи!!! Надо удалять старые архивы рара которым больше 5 дней с помощью скрипта. Может у кого есть готовый, - поделитесь пожалуйста...

-------
GNU - not UNIX


Отправлено: 18:55, 29-09-2010

 

Googler


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

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


для стандартного формата даты: "ДД.ММ.ГГГГ"
Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion

Call :FromNow -5
for %%i in (*.rar) do (
  set $t=%%~ti& set $d=!$t:~6,4!!$t:~3,2!!$t:~,2!
  if !$d! LSS %yyyymmdd% DEL /F "%%i"
)
Exit /B

:FromNow
 SetLocal
 Set yyyy=%DATE:~-4%& set /a mm=100%DATE:~3,2%%%100& set /a dd=100%DATE:~,2%%%100
 Set /A JD=%~1+dd-32075+1461*(yyyy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yyyy+4900+(mm-14)/12)/100)/4
 Set /A L=JD+68569,N=4*L/146097,L=L-(146097*N+3)/4,I=4000*(L+1)/1461001
 Set /A L=L-1461*I/4+31,J=80*L/2447,K=L-2447*J/80,L=J/11
 Set /A J=J+2-12*L,I=100*(N-49)+I+L
 Set /A yyyy=I,mm=100+J,dd=100+K
 EndLocal& Set yyyymmdd=%yyyy%%mm:~-2%%dd:~-2%
Exit /B
формулы пересчета даты взяты отсюда:
http://www.dostips.com/DtTipsDateTim...ion.date2jdate

-------
Как сообщить о том, что моя проблема решена?
не оказываю техподдержку через ПМ/ICQ/Mail - для этого есть форум


Последний раз редактировалось amel27, 30-09-2010 в 14:49.

Это сообщение посчитали полезным следующие участники:

Отправлено: 06:26, 30-09-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


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


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

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


Ещё вопрос, например если я хочу сменить с 15 дней на 5? Мне достаточно изминить 15 на 5 ???

-------
GNU - not UNIX


Отправлено: 11:37, 30-09-2010 | #3


Googler


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

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


wizardkir, угу, процедура FromNow отсчитывает заданное количество дней от текущей даты, результат потом используется для сравнения

-------
Как сообщить о том, что моя проблема решена?
не оказываю техподдержку через ПМ/ICQ/Mail - для этого есть форум

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:57, 30-09-2010 | #4


Старожил


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

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


Вот и появилась вменяемая формула для работы с датами... но по мне - лучше оставить последние 5 (или 15) архивов... а то если "почему-то" бэкапы не прошли, то нужно иметь хоть что-то, а не вытирать все подряд за сроком давности.

-------
Как сказало Дерево Дровосеку: "я - пень".

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:29, 30-09-2010 | #5


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


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

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


трабл, скрипт сработал один раз и больше не пашет...ребят не подскажите в чом дело?

-------
GNU - not UNIX


Отправлено: 17:40, 10-11-2010 | #6


Googler


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

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


wizardkir, не запускается или запускается, но не делает что надо?...

-------
Как сообщить о том, что моя проблема решена?
не оказываю техподдержку через ПМ/ICQ/Mail - для этого есть форум


Отправлено: 09:57, 11-11-2010 | #7


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


Сообщения: 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


Аватара для mskam

Пользователь


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

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


задача похожая, есть каталог допустим C:/123 в которой есть файлы *.avi которые там появляются в достаточном количестве и мне надо удалять файлы *.avi в этом каталоге которые старше 7 дней.

подойдёт ли пример написаны amel27 только с маленьким дополнением

Код: Выделить весь код
Call :FromNow -7
for %%i in (C:/123/*.avi) do (
не пинайте сильно я в этом языке мало что понимаю.

Отправлено: 09:13, 20-08-2013 | #9


Ветеран


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

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


не проще ли обычным forfiles /D?

Отправлено: 14:16, 20-08-2013 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление старых архивов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - [решено] Удаление старых учетных данных из АД Donner Скриптовые языки администрирования Windows 2 17-06-2014 09:56
Служебные - [Addon] Удаление драйверов принтеров, старых SCSI, сканеров, мультикарт и модемов greg_b Наборы обновлений для Windows XP/2003/Windows 7 409 07-07-2011 10:07
Драйвер - [решено] Удаление старых устройств Elvis Microsoft Windows 2000/XP 3 20-07-2009 15:58
удаление старых объектов домена. Невозможнсоть переподключения под старым именем baribanka Microsoft Windows NT/2000/2003 3 07-11-2005 17:18
удаление повреждённых архивов Jul Защита компьютерных систем 2 17-01-2004 15:56




 
Переход