|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Перемещение устаревших файлов из папки в резервную папку |
|
|
CMD/BAT - [решено] Перемещение устаревших файлов из папки в резервную папку
|
Старожил Сообщения: 157 |
Профиль | Отправить PM | Цитировать всем добрый день! Имеется задача перемещения устаревший файлов из папки, но не всех, а только недельной давности, что бы файлы за последнюю неделю сохранялись. Скрипт будет выполняться 2 раза в неделю. На данный момент имею вот такой скрипт, но перемещения файлов не происходит???!! Подскажите по чему!
@Echo Off :: Параметры скрипта, 0 < $OLD < 29! :: $OLD - столько ДНЕЙ храним архивы Set $SRC=D:\obmen1 Set $DST=D:\Backup_Obmen1 Set $OLD=1 :: Находим текущие день/месяц/год For /F "Tokens=1 Delims=." %%i In ('WMIC OS Get LocalDateTime^|Find "."') Do Set $Time=%%i Set $Y=%$Time:~0,4%&Set $M=0%$Time:~4,2%&Set $D=0%$Time:~6,2% Set $M=%$M:~-2%&Set $D=%$D:~-2% :: копируем старые каталоги (файлы) Call :GetOldDate %$OLD% For /F "Tokens=1-3 Delims=." %%i In ('DIR /B/A:D %$SRC%\??.??.????') Do If %%k%%j%%i LEQ %$Y%%$M%%$D% move /Y "%$SRC%\%%i.%%j.%%k %$DST%\" :: Выход EXIT :GetOldDate :: ----------------------------------- :: Расчет даты, предшествующей текущей :: заданное количество дней (< 29) :: ----------------------------------- Set /A $D -= %1 If %$D% GTR 0 GoTo GetOldDate_2 :: Месяц, год, дней в месяце Set /A $M=%$M%+11-((%$M%+10)/12)*12 If %$M% EQU 12 Set /A $Y-=1 For /F "Tokens=%$M%" %%i In ("31 28 31 30 31 30 31 31 30 31 30 31") Do Set $X=%%i If %$M% NEQ 2 GoTo GetOldDate_1 :: Февраль високосного года Set /A $B1=%$Y%-(%$Y%/4)*4 Set /A $B2=%$Y%-(%$Y%/100)*100 Set /A $B3=%$Y%-(%$Y%/400)*400 If 0 EQU %$B1% If 0 NEQ %$B2% Set /A $X+=1 If 0 EQU %$B3% Set /A $X+=1 :: День месяца :GetOldDate_1 Set /A $D=%$D%+%$X%-((%$D%+%$X%-1)/%$X%)*%$X% :: Форматирование даты :GetOldDate_2 Set $M=0%$M%&Set $D=0%$D% Set $M=%$M:~-2%&Set $D=%$D:~-2% GoTo :EOF |
|
Отправлено: 10:11, 02-04-2010 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать Основная проблема - отнять от текущей даты заданное кол-во дней. В решении похожей задачи заимствовал процедуры. Вот батник, который помещаете в назначенные задания (но 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 |
------- Отправлено: 19:51, 12-05-2010 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 157
|
Профиль | Отправить PM | Цитировать А что Вы там говорили по поводу rar.exe. Готов выслушать Ваши предложения!
|
Отправлено: 11:21, 28-05-2010 | #22 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать "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 можно поместить в назначенные задания |
------- Последний раз редактировалось megaloman, 29-05-2010 в 07:57. Отправлено: 14:04, 28-05-2010 | #23 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
7 / 2008 R2 - Перемещение папки Users в Windows 7 | bab00n | Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista | 28 | 17-03-2015 12:11 | |
V. 5.5/2000/2003 - [решено] Скрипт для чистки общей папки от устаревших сообщений | migunov | Microsoft Exchange Server | 2 | 21-11-2009 09:50 | |
[решено] SVN, как добавить папку в svn-репозиторий без вложенных в папку файлов? | pingUIN | Хочу все знать | 1 | 03-11-2009 17:16 | |
Разное - [решено] Перемещение папки Users | nikkor7 | Microsoft Windows Vista | 2 | 13-04-2009 11:58 | |
[решено] Перемещение папки Users и изменение букв дискам средствами WAIK | alcatraz | Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista | 10 | 28-02-2009 03:04 |
|