Войти

Показать полную графическую версию : [решено] Перемещение устаревших файлов из папки в резервную папку


Страниц : 1 [2]

megaloman
12-05-2010, 19:51
Основная проблема - отнять от текущей даты заданное кол-во дней. В решении похожей задачи (http://forum.oszone.net/thread-172105.html) заимствовал процедуры. Вот батник, который помещаете в назначенные задания (но rar лучше, всё равно старьё надо архивировать!)Echo off
rem -------------------
rem Перенос файлов не новее указанного числа дней из одной директории в другую
rem Предполагаю, что Дата в системе выдаётся в формате дд.мм.гггг чч:мм и т д (разделитель не важен)
rem -------------------

rem ------------------------------ Кол-во дней за которые не перемещаем файлы
Set NDays=5

rem ------------------------------ Где находятся все файлы (можно указать маску)
Set WhereAll=H:\Delete\All Files\*.*

rem ------------------------------ Куда перемещаем старые
Set WhereOld=H:\Delete\Old Files\

rem Выделяю из текущей даты день, месяц, год

Set Dt=%Date%

Set Day=%Dt:~0,2%
If %Day:~0,1%==0 Set Day=%Day:~1,1%

Set Mon=%Dt:~3,2%
If %Mon:~0,1%==0 Set Mon=%Mon:~1,1%

Set Yea=%Dt:~6,4%

Call :MinusDays

Set Dt=%Yea%%Mon%%Day%

FOR %%i IN ("%WhereAll%") DO Call :MoveFromTo "%%i"

GoTo :End

rem -------------------------------------------------------------
rem Процедура перемещает файлы не новее указанной даты (формат ггггммдд)
rem -------------------------------------------------------------

:MoveFromTo

Set D=%~t1
Set D=%D:~6,4%%D:~3,2%%D:~0,2%

If %D% LEQ %Dt% Move "%~f1" "%WhereOld%"

GoTo :End


rem -------------------------------------------------------------
rem Процедура отнимает от даты заданное число дней
rem Дата содержится в трёх переменных Day Mon Yea
rem -------------------------------------------------------------

:MinusDays

For /L %%D IN (1,1,%NDays%) Do Call :OldDt

If %Day% LSS 10 Set Day=0%Day%
If %Mon% LSS 10 Set Mon=0%Mon%

rem Echo %Yea% %Mon% %Day%
rem Pause

GoTo End

rem ---------------------------------
rem Процедура отнимает от даты 1 день
rem ---------------------------------

:OldDt
Set /A Day=%Day%-1

If %Day% GTR 0 GoTo End

Set Day=31

Set /A Mon=%Mon%-1

If %Mon% GTR 0 GoTo BotDay

Set Mon=12
Set /A Yea=%Yea%-1

:BotDay

If Not %Mon%==2 GoTo Mon30
Set Day=28

Set iYea=%Yea%
Set /A iYea=%iYea%/4
Set /A iYea=%iYea%*4

If %Yea%==%iYea% Set Day=29
GoTo End

:Mon30
If %Mon%==4 Set Day=30
If %Mon%==6 Set Day=30
If %Mon%==9 Set Day=30
If %Mon%==11 Set Day=30

GoTo End
rem ---------------------------------


:End

Батник располагайте где угодно, только не в директории откуда переносите файлы, в назначенном задании укажите его полное имя (с путем)

zavoruev
28-05-2010, 11:21
А что Вы там говорили по поводу rar.exe. Готов выслушать Ваши предложения!

megaloman
28-05-2010, 14:04
"C:\Program Files\WinRar\winrar.exe" a -df -to7d -agYYYYMMDD{_NameArc} "H:\Kuda\.rar" "T:\Otkuda\*.*"

Ключ -df удалит заархивированные файлы
Ключ -to7d приведёт к архивации файлов старше 7 дней

Ключ -agYYYYMMDD{_NameArc} - добавит к имени архива дату и символы. Я имя архива написал пустым (.rar). _NameArc - НапишИте своё, подходящее по смыслу.
После отработки WinRar для сегодня получим архив под именем 20100528_NameArc.rar в папке H:\Kuda\

"H:\Kuda\.rar" - путь к заархивированным файлам (напИшите своё)
"T:\Otkuda\*.*" - где лежат архивируемые файлы (напИшите своё)

Описание ключей в справочной системе WinRar
Вызов WinRar можно поместить в назначенные задания




© OSzone.net 2001-2012