|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Скрипт для копирования файлов/папок с заменой |
|
|
Любой язык - [решено] Скрипт для копирования файлов/папок с заменой
|
Новый участник Сообщения: 26 |
Профиль | Отправить PM | Цитировать Всем здрасьте )) , в общем поставили передо мной такую задачу, имеется папка с бекапами, нужно что бы эта папка копировалась в определенное место, раз в сутки, а по истечении 7 дней, заменялись на новые по одному (по принципу как в видео регистраторе)
Подскажите как это реализовать, идея есть через xcopy, но она может копировать файлы по изменению в определенный день, либо после, а надо что бы более старые затирались. |
|
Отправлено: 16:35, 20-03-2013 |
Новый участник Сообщения: 26
|
Профиль | Отправить PM | Цитировать megaloman, Нет, для бэкапов, каждый день создается папка, формата dd-mm-yyyy, а в неё каждый час делаются бэкапы
архивы yyyymmddhhmm.rar |
Отправлено: 10:39, 21-03-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 26
|
Профиль | Отправить PM | Цитировать Нашел вот такой скрипт
Option Explicit Dim fso Dim objFolder Dim strFolder Dim objFiles Dim objFile Dim datDate On Error Resume Next 'initialize parameters strFolder = "D:\Folder" datDate = Now - 7 'one week ago 'set object variables Set fso = CreateObject("Scripting.FileSystemObject") Set objFolder = fso.GetFolder(strFolder) Set objFiles = objFolder.Files 'loop through members of collection For Each objFile in objFiles 'do something with file Call DeleteOldFile(objFile, datDate) Next WScript.Quit Err.Number Function DeleteOldFile(objFile, datDate) 'function deletes file which was created date specified and earlier If objFile.DateCreated <= datDate Then 'WScript.Echo objFile.Name & " " & objFile.DateCreated objFile.Delete End If End Function но он удаляет файлы старше определенной даты не много изменил его что бы работал с папками, а он почему то не удаляет их, Option Explicit Dim fso Dim objFolder Dim strFolder Dim objFiles Dim objFile Dim datDate On Error Resume Next 'initialize parameters strFolder = "C:\move" datDate = Now - 7 'one week ago 'set object variables Set fso = CreateObject("Scripting.FileSystemObject") Set objFolder = fso.GetFolder(strFolder) Set objFolder = objFolder.Files 'loop through members of collection For Each objFolder in objFolder 'do something with file Call DeleteOldFolder(objFolder, datDate) Next WScript.Quit Err.Number Function DeleteOldFolder(objFolder, datDate) 'function deletes file which was created date specified and earlier If objFolder.DateCreated <= datDate Then 'WScript.Echo objFolder.Name & " " & objFolder.DateCreated objFolder.Delete End If End Function где я не верно делаю? |
Отправлено: 14:32, 22-03-2013 | #3 |
Ветеран Сообщения: 2726
|
Профиль | Отправить 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:\DDDDD, причем при записи каждого нового файла удалится старый файл, если он старше нового на неделю или более. Пересчет даты заимствовал здесь |
------- Последний раз редактировалось megaloman, 26-03-2013 в 23:15. Отправлено: 23:55, 22-03-2013 | #4 |
Новый участник Сообщения: 26
|
Профиль | Отправить PM | Цитировать Спасибо, походу дела- это то что нужно.
|
|
Отправлено: 11:03, 23-03-2013 | #5 |
Новый участник Сообщения: 26
|
Профиль | Отправить PM | Цитировать Что-то не получается, думал что формат папки с датой не верный, я выше в примере указал dd-mm-yyyy, хотя на самом деле должно быть dd.mm.yyyy, ладно это не проблема привел папки к нужному формату, все равно не переносит,
И к стати скрипт смотрит дату создания или дату изменения файла? Я пока тестирую на другом компе, по этому перенес для проверки несколько файлов, естественно атрибуты не много изменились, дата создания отличается от даты изменения. Системную дату поменял на месяц в перед, тоже не работает. |
Отправлено: 11:31, 26-03-2013 | #6 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать Цитата:
Цитата:
Так сходу, если сегодня 26.03.2013, то у меня в примере работаем с папкой D:\Delete\26-03-2013. Если такой папки нет, или в ней нет файлов по маске 20*.rar, то скрипт ничего не делает. В постановке задачи не указано, что батник Вы будете запускать сегодня на позавчерашние данные. Если папка называется дд.мм.гггг, то вместо Set InDate=%From%\%Date:~0,2%-%Date:~3,2%-%Date:~6,4% напишите Set InDate=%From%\%Date:~0,2%.%Date:~3,2%.%Date:~6,4% Папка D:\DDDDD тоже должна существовать (естественно, это я придумал имена, но Вы вольны придумать свои, лишь бы папки существовали, озаботьтесь, чтобы правее наименования папки в скрипте не было пробелов) Если в папке D:\DDDDD ничего нет, перенесём туда всё содержимое папки D:\Delete\26-03-2013 |
||
------- Последний раз редактировалось megaloman, 26-03-2013 в 12:19. Отправлено: 11:48, 26-03-2013 | #7 |
Новый участник Сообщения: 26
|
Профиль | Отправить PM | Цитировать Ага понятно, обозвал папку сегодняшним числом, файлы скопировал.
Но копировать то нужно из папок которые старше чем сегодня. |
Отправлено: 13:10, 26-03-2013 | #8 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать Извольте чётко поставить задачу. Я понимал так: есть сегодняшняя папка, мы сегодня запускаем скрипт, он копирует файлы в другую папку, вытесняя при этом старые более чем недельной давности. Что хотите Вы? По какому алгоритму?
Цитата:
|
|
------- Отправлено: 13:47, 26-03-2013 | #9 |
Новый участник Сообщения: 26
|
Профиль | Отправить PM | Цитировать Прошу прощения если я криво объяснил , сам всегда требую что бы задачу ставили чётко.
Попробую как то подробней есть папка на пример d:\bcp\ в ней папки с датой dd.mm.yyyy в этих папках архивы yyyymmddhhmm.rar. Мне поставлена задача, что бы из папки bcp копировались файлы старше недели, задание на пример будет выполнятся раз в сутки. то есть 01.mm.yyyy 02.mm.yyyy 03.mm.yyyy 04.mm.yyyy 05.mm.yyyy 06.mm.yyyy 07.mm.yyyy далее проходит неделя архивы из папки 01.mm.yyyy переносятся в другую папку ну и так раз в день, а потом соответственно в папку в которую переносятся архивы , архивы заменялись на более новые. Что бы актуальность архивов бала 1 неделя. Блин перечитал сам, что написал, по моему еще больше запутал. |
Отправлено: 14:13, 26-03-2013 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|