Имя пользователя:
Пароль:
 

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

Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo Off

Set From=D:\Delete
Set To=D:\DDDDD
Set Mask=20*.rar

Set DeltaDay=-7

rem Пересчет даты на заданное кол-во дней
rem Формат даты dd.mm.yyyy +- дни получим новые yyyymmdd

Call :FromNow %DeltaDay% %Date%
Set OldD=%yyyymmdd:~2,6%

Set InDate=%From%\%Date:~0,2%-%Date:~3,2%-%Date:~6,4%

If Not Exist "%InDate%\%Mask%" GoTo :Eof
If Not Exist "%To%\%Mask%" Copy "%InDate%\%Mask%" "%To%\" >nul

FOR /F "usebackq delims=" %%i IN (`Dir "%InDate%\%Mask%" /B /A-D /ON`) DO (
	Set Log=1

	If Not Exist "%To%\%%i" (
		FOR /F "usebackq delims=" %%j IN (`Dir "%To%\%Mask%" /B /A-D /ON`) DO Call :Nav %%i %%j
	)
)

GoTo :Eof

:Nav
	If %Log%==0 GoTo :Eof

	Set NewH=%1                
        Set NewH=%OldD%%NewH:~8,2%
	Set OldH=%2
	Set OldH=%OldH:~2,8%

	If %OldH% LEQ %NewH%  Del "%To%\%2"
	Copy "%InDate%\%1" "%To%\" >nul
	Set Log=0

GoTo :Eof

:FromNow
 SetLocal
 Set DT=%2
 Set yyyy=%DT:~-4%& set /a mm=100%DT:~3,2%%%100& set /a dd=100%DT:~,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%
GoTo :Eof
Для примера здесь в папке D:\Delete имеются подпапка с сегодняшним числом D:\Delete\22-03-2013 где хранятся файлы 20yymmddhhmm.rar
Эти файлы переписываются в D:\DDDDD, причем при записи каждого нового файла удалится старый файл, если он старше нового на неделю или более.

Пересчет даты заимствовал здесь

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 26-03-2013 в 23:15.

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

Отправлено: 23:55, 22-03-2013 | #4