|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Скрипт для копирования файлов/папок с заменой |
|
Любой язык - [решено] Скрипт для копирования файлов/папок с заменой
|
Новый участник Сообщения: 26 |
Профиль | Отправить PM | Цитировать Всем здрасьте )) , в общем поставили передо мной такую задачу, имеется папка с бекапами, нужно что бы эта папка копировалась в определенное место, раз в сутки, а по истечении 7 дней, заменялись на новые по одному (по принципу как в видео регистраторе)
Подскажите как это реализовать, идея есть через xcopy, но она может копировать файлы по изменению в определенный день, либо после, а надо что бы более старые затирались. |
|
Отправлено: 16:35, 20-03-2013 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать Постановка задачи в Вашем изложении весьма запутана, поэтому сам себе ставлю задачу и сам её решаю
Имеется папка, например, E:\Delete, в которой создаются подпапки с именами вида дд.мм.гггг . В них создаются файлы с именами вида ггггммддччмм.rar Также есть папка, например, E:\DDDDD, в которой хранятся копии файлов из указанных папок, но копии файлов в этой папке должны храниться не более недели. Вот батник, который удаляет в папке E:\DDDDD копии файлов старше недели (время создания файла анализируется по информации в его имени ггггммдд) и копирует все файлы в подпапках E:\Delete\дд.мм.гггг\ггггммддччмм.rar в папку E:\DDDDD, которые не старше недели и которых еще нет в папке E:\DDDDD (время создания файлов определяется из имени папки дд.мм.гггг) @Echo Off Set From=E:\Delete Set To=E:\DDDDD Set Mask=20*.rar Set MaskD=??.??.20?? Set DeltaDay=-7 SetLocal EnableExtensions EnableDelayedExpansion rem Пересчет даты на заданное кол-во дней rem Формат даты dd.mm.yyyy +- дни получим новые yyyymmdd Call :FromNow %DeltaDay% %Date% rem Чистим папку %To% от файлов старше недели If Exist "%To%\%Mask%" ( FOR /F "usebackq delims=" %%j IN (`Dir "%To%\%Mask%" /B /A:-D /O:N`) DO ( Set FDate=%%~nxj Set FDate=!FDate:~0,8! If !FDate! LEQ %yyyymmdd% (Del "%To%\%%j">NUL) Else (GoTo :Continue) ) ) :Continue rem Копируем файлы из папок во %From% не старше недели FOR /F "usebackq delims=" %%j IN (`Dir "%From%\%MaskD%" /B /A:D /O:N`) DO ( Set FDate=%%~nxj Set FDate=!FDate:~6,4!!FDate:~3,2!!FDate:~0,2! If !FDate! GTR %yyyymmdd% XCopy "%From%\%%j\%Mask%" "%To%\" /D /Y >NUL ) 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 |
------- Отправлено: 18:13, 29-03-2013 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 26
|
Профиль | Отправить PM | Цитировать Все верно так и должно работать, пути папок изменил на свои, имена папок в формате dd.mm.yyyy, имена архивов yyyymmddhhmm_1C.rar, но думаю это не принципиально если указана маска 20*.rar, но не копирует, просто выполняется батник, но ни чего не происходит.
|
Отправлено: 09:21, 04-04-2013 | #12 |
Новый участник Сообщения: 26
|
Профиль | Отправить PM | Цитировать Вот что происходит
C:\Documents and Settings\Администратор>D:\move\move1.cmd C:\Documents and Settings\Администратор>chcp 866 Текущая кодовая страница: 866 C:\Documents and Settings\Администратор>chcp 1251 Текущая кодовая страница: 1251 C:\Documents and Settings\Администратор>Set From=D:\bcp C:\Documents and Settings\Администратор>Set To=D:\target_bkp C:\Documents and Settings\Администратор>Set Mask=20*.rar C:\Documents and Settings\Администратор>Set MaskD=??.??.20?? C:\Documents and Settings\Администратор>Set DeltaDay=-7 C:\Documents and Settings\Администратор>SetLocal EnableExtensions EnableDelayedE xpansion C:\Documents and Settings\Администратор>rem Пересчет даты на заданное кол-во дне й C:\Documents and Settings\Администратор>rem Формат даты dd.mm.yyyy +- дни получи м новые yyyymmdd C:\Documents and Settings\Администратор>Call :FromNow -7 04.04.2013 C:\Documents and Settings\Администратор>SetLocal C:\Documents and Settings\Администратор>Set DT=04.04.2013 C:\Documents and Settings\Администратор>Set yyyy=2013 & set /a mm=10004%100 & set /a dd=10004%100 C:\Documents and Settings\Администратор>Set /A JD=-7+dd-32075+1461*(yyyy+4800+(m m-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yyyy+4900+(mm-14)/12)/100)/4 C:\Documents and Settings\Администратор>Set /A L=JD+68569,N=4*L/146097,L=L-(1460 97*N+3)/4,I=4000*(L+1)/1461001 C:\Documents and Settings\Администратор>Set /A L=L-1461*I/4+31,J=80*L/2447,K=L-2 447*J/80,L=J/11 C:\Documents and Settings\Администратор>Set /A J=J+2-12*L,I=100*(N-49)+I+L C:\Documents and Settings\Администратор>Set /A yyyy=I,mm=100+J,dd=100+K C:\Documents and Settings\Администратор>EndLocal & Set yyyymmdd=20130328 C:\Documents and Settings\Администратор>GoTo :Eof C:\Documents and Settings\Администратор>rem Чистим папку D:\target_bkp от файлов старше недели C:\Documents and Settings\Администратор>If Exist "D:\target_bkp\20*.rar" (FOR /F "usebackq delims=" %j IN (`Dir "D:\target_bkp\20*.rar" /B /A:-D /O:N`) DO ( Echo "D:\bcp\??.??.20??" %j pause Set FDate=%~nxj Set FDate=!FDate:~0,8! If !FDate! LEQ 20130328 (Del "D:\target_bkp\%j" 1>NUL ) Else (GoTo :Continue ) ) ) C:\Documents and Settings\Администратор>rem Копируем файлы из папок во D:\bcp не старше недели C:\Documents and Settings\Администратор>FOR /F "usebackq delims=" %j IN (`Dir "D :\bcp\??.??.20??" /B /A:D /O:N`) DO ( Set FDate=%~nxj Set FDate=!FDate:~6,4!!FDate:~3,2!!FDate:~0,2! If !FDate! GTR 20130328 XCopy "D:\bcp\%j\20*.rar" "D:\target_bkp\" /D /Y 1>NUL ) C:\Documents and Settings\Администратор>( Set FDate=06.03.2013 Set FDate=!FDate:~6,4!!FDate:~3,2!!FDate:~0,2! If !FDate! GTR 20130328 XCopy "D:\bcp\06.03.2013\20*.rar" "D:\target_bkp\" /D / Y 1>NUL ) C:\Documents and Settings\Администратор>( Set FDate=23.03.2013 Set FDate=!FDate:~6,4!!FDate:~3,2!!FDate:~0,2! If !FDate! GTR 20130328 XCopy "D:\bcp\23.03.2013\20*.rar" "D:\target_bkp\" /D / Y 1>NUL ) C:\Documents and Settings\Администратор>( Set FDate=24.03.2013 Set FDate=!FDate:~6,4!!FDate:~3,2!!FDate:~0,2! If !FDate! GTR 20130328 XCopy "D:\bcp\24.03.2013\20*.rar" "D:\target_bkp\" /D / Y 1>NUL ) C:\Documents and Settings\Администратор>( Set FDate=25.03.2013 Set FDate=!FDate:~6,4!!FDate:~3,2!!FDate:~0,2! If !FDate! GTR 20130328 XCopy "D:\bcp\25.03.2013\20*.rar" "D:\target_bkp\" /D / Y 1>NUL ) C:\Documents and Settings\Администратор>GoTo :Eof |
Последний раз редактировалось darkAge, 04-04-2013 в 12:08. Отправлено: 11:52, 04-04-2013 | #13 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать Судя по приведенному, Вам нЕчего копировать. По этой картинке будем копировать файлы из папок, начиная с 29.03.2013 и т д., а последнее, что у Вас есть, 25.03.2013 - вне диапазона на сохранение. Вы не предоставили данные для батника. Кстати, батник набран не в 866 кодировке, но, так как у Вас не присутствуют в описании путей русские буквы - это не принципиально.
|
------- Отправлено: 13:06, 04-04-2013 | #14 |
Новый участник Сообщения: 26
|
Профиль | Отправить PM | Цитировать Во точно, ступил, поставил 29 дней, начал копировать.
спасибо. |
Отправлено: 17:23, 04-04-2013 | #15 |
Новый участник Сообщения: 26
|
Профиль | Отправить PM | Цитировать Здравствуйте, давно не заходил, сапасибо за помощь, но появился вопрос, где то после недели выполнения скрипта, он стал останавливаться и требует нажатия любой кнопки, как я понимаю для подтверждения удаления файла.
|
Отправлено: 14:17, 28-06-2013 | #16 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать Безотносительно к написанным мной скриптам (сейчас некогда вспоминать и разбираться) вызываем хелп для команды Del и читаем
Цитата:
|
|
------- Отправлено: 18:58, 28-06-2013 | #17 |
Новый участник Сообщения: 26
|
Профиль | Отправить PM | Цитировать добавил атрибуты, не помогло все равно запрос выдается
@Echo on chcp 866 Set From=E:\BackUp\virtual Set To=\\192.168.3.13\Backup\Virtual Set Mask=20*.rar Set MaskD=??.??.20?? Set DeltaDay=-7 SetLocal EnableExtensions EnableDelayedExpansion rem Пересчет даты на заданное кол-во дней rem Формат даты dd.mm.yyyy +- дни получим новые yyyymmdd Call :FromNow %DeltaDay% %Date% rem Чистим папку %To% от файлов старше недели If Exist "%To%\%Mask%" ( FOR /F "usebackq delims=" %%j IN (`Dir "%To%\%Mask%" /B /A:-D /O:N`) DO ( Echo "%From%\%MaskD%" %%j pause Set FDate=%%~nxj Set FDate=!FDate:~0,8! If !FDate! LEQ %yyyymmdd% (Del "%To%\%%j" /Q /F >NUL) Else (GoTo :Continue) ) ) :Continue rem Копируем файлы из папок во %From% не старше недели FOR /F "usebackq delims=" %%j IN (`Dir "%From%\%MaskD%" /B /A:D /O:N`) DO ( Set FDate=%%~nxj Set FDate=!FDate:~6,4!!FDate:~3,2!!FDate:~0,2! If !FDate! GTR %yyyymmdd% XCopy "%From%\%%j\%Mask%" "%To%\" /D /Y >NUL ) 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 |
Последний раз редактировалось darkAge, 01-07-2013 в 13:29. Отправлено: 13:17, 01-07-2013 | #18 |
Пользователь Сообщения: 124
|
Профиль | Отправить PM | Цитировать Цитата darkAge:
Call :FromNow %DeltaDay% %Date% rem Чистим папку %To% от файлов старше недели If Exist "%To%\%Mask%" ( FOR /F "usebackq delims=" %%j IN (`Dir "%To%\%Mask%" /B /A:-D /O:N`) DO ( Echo "%From%\%MaskD%" %%j |
|
------- Отправлено: 17:02, 01-07-2013 | #19 |
Новый участник Сообщения: 26
|
Профиль | Отправить PM | Цитировать Всем спасибо, все заработало.
|
Отправлено: 18:06, 01-07-2013 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
VBS/WSH/JS - [решено] Скрипт для удаления старых файлов и папок из определенной папки | avfiga | Скриптовые языки администрирования Windows | 71 | 07-01-2023 18:50 | |
Система - Скрипт для закрытия окон/программ/файлов/папок/etc... средней кнопкой мыши. | _duke_ | Программное обеспечение Windows | 15 | 22-06-2013 15:31 | |
CMD/BAT - Скрипт копирования файлов и папок в сети в дерикторию пользователей | DNKolian | Скриптовые языки администрирования Windows | 2 | 18-02-2013 10:52 | |
CMD/BAT - Скрипт для копирования папок по сети | _bb_ | Скриптовые языки администрирования Windows | 4 | 02-03-2011 15:07 | |
Скрипт для копирования файлов с 1 сервера на несколько | andro_id | Программирование в *nix | 2 | 04-09-2008 11:48 |
|