Компьютерный форум 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=186889)

wizardkir 29-09-2010 18:55 1507571

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

amel27 30-09-2010 06:26 1507907

для стандартного формата даты: "ДД.ММ.ГГГГ"
Код:

@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

wizardkir 30-09-2010 11:37 1508038

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

amel27 30-09-2010 11:57 1508053

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

NiOl 30-09-2010 12:29 1508078

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

wizardkir 10-11-2010 17:40 1539422

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

amel27 11-11-2010 09:57 1539833

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

biossa 28-09-2011 21:31 1762059

Удаление архивных файлов в подпапках 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

mskam 20-08-2013 09:13 2204409

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

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

Код:

Call :FromNow -7
for %%i in (C:/123/*.avi) do (

не пинайте сильно я в этом языке мало что понимаю.

Busla 20-08-2013 14:16 2204560

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


Время: 22:34.

Время: 22:34.
© OSzone.net 2001-