![]() |
Скрипт для копирования файлов/папок с заменой
Всем здрасьте )) , в общем поставили передо мной такую задачу, имеется папка с бекапами, нужно что бы эта папка копировалась в определенное место, раз в сутки, а по истечении 7 дней, заменялись на новые по одному (по принципу как в видео регистраторе)
Подскажите как это реализовать, идея есть через xcopy, но она может копировать файлы по изменению в определенный день, либо после, а надо что бы более старые затирались. |
megaloman, Нет, для бэкапов, каждый день создается папка, формата dd-mm-yyyy, а в неё каждый час делаются бэкапы
архивы yyyymmddhhmm.rar |
Нашел вот такой скрипт
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 где я не верно делаю? |
Код:
@Echo Off Эти файлы переписываются в D:\DDDDD, причем при записи каждого нового файла удалится старый файл, если он старше нового на неделю или более. Пересчет даты заимствовал здесь |
Спасибо, походу дела- это то что нужно.
|
Что-то не получается, думал что формат папки с датой не верный, я выше в примере указал dd-mm-yyyy, хотя на самом деле должно быть dd.mm.yyyy, ладно это не проблема привел папки к нужному формату, все равно не переносит,
И к стати скрипт смотрит дату создания или дату изменения файла? Я пока тестирую на другом компе, по этому перенес для проверки несколько файлов, естественно атрибуты не много изменились, дата создания отличается от даты изменения. Системную дату поменял на месяц в перед, тоже не работает. |
Цитата:
Цитата:
Так сходу, если сегодня 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 |
Ага понятно, обозвал папку сегодняшним числом, файлы скопировал.
Но копировать то нужно из папок которые старше чем сегодня. |
Извольте чётко поставить задачу. Я понимал так: есть сегодняшняя папка, мы сегодня запускаем скрипт, он копирует файлы в другую папку, вытесняя при этом старые более чем недельной давности. Что хотите Вы? По какому алгоритму?
Цитата:
|
Прошу прощения если я криво объяснил :sorry: , сам всегда требую что бы задачу ставили чётко.
Попробую как то подробней есть папка на пример 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 неделя. Блин перечитал сам, что написал, по моему еще больше запутал. |
Постановка задачи в Вашем изложении весьма запутана, поэтому сам себе ставлю задачу и сам её решаю
Имеется папка, например, E:\Delete, в которой создаются подпапки с именами вида дд.мм.гггг . В них создаются файлы с именами вида ггггммддччмм.rar Также есть папка, например, E:\DDDDD, в которой хранятся копии файлов из указанных папок, но копии файлов в этой папке должны храниться не более недели. Вот батник, который удаляет в папке E:\DDDDD копии файлов старше недели (время создания файла анализируется по информации в его имени ггггммдд) и копирует все файлы в подпапках E:\Delete\дд.мм.гггг\ггггммддччмм.rar в папку E:\DDDDD, которые не старше недели и которых еще нет в папке E:\DDDDD (время создания файлов определяется из имени папки дд.мм.гггг) Код:
@Echo Off |
Все верно так и должно работать, пути папок изменил на свои, имена папок в формате dd.mm.yyyy, имена архивов yyyymmddhhmm_1C.rar, но думаю это не принципиально если указана маска 20*.rar, но не копирует, просто выполняется батник, но ни чего не происходит.
|
Вложений: 1
Вот что происходит
Код:
C:\Documents and Settings\Администратор>D:\move\move1.cmd |
Судя по приведенному, Вам нЕчего копировать. По этой картинке будем копировать файлы из папок, начиная с 29.03.2013 и т д., а последнее, что у Вас есть, 25.03.2013 - вне диапазона на сохранение. Вы не предоставили данные для батника. Кстати, батник набран не в 866 кодировке, но, так как у Вас не присутствуют в описании путей русские буквы - это не принципиально.
|
Во точно, ступил, поставил 29 дней, начал копировать.
спасибо. |
Вложений: 1
Здравствуйте, давно не заходил, сапасибо за помощь, но появился вопрос, где то после недели выполнения скрипта, он стал останавливаться и требует нажатия любой кнопки, как я понимаю для подтверждения удаления файла.
|
Безотносительно к написанным мной скриптам (сейчас некогда вспоминать и разбираться) вызываем хелп для команды Del и читаем
Цитата:
|
добавил атрибуты, не помогло все равно запрос выдается
Код:
@Echo on |
Цитата:
Код:
Call :FromNow %DeltaDay% %Date% Код:
C:\>pause /? |
Всем спасибо, все заработало.
|
Время: 17:07. |
Время: 17:07.
© OSzone.net 2001-