Любой язык - [решено] Скрипт для копирования файлов/папок с заменой
-
darkAge
Любой язык - [решено] Скрипт для копирования файлов/папок с заменой
Всем здрасьте )) , в общем поставили передо мной такую задачу, имеется папка с бекапами, нужно что бы эта папка копировалась в определенное место, раз в сутки, а по истечении 7 дней, заменялись на новые по одному (по принципу как в видео регистраторе)
Подскажите как это реализовать, идея есть через xcopy, но она может копировать файлы по изменению в определенный день, либо после, а надо что бы более старые затирались.
Подскажите как это реализовать, идея есть через xcopy, но она может копировать файлы по изменению в определенный день, либо после, а надо что бы более старые затирались.
-
darkAge
Re: Любой язык - [решено] Скрипт для копирования файлов/папок с заменой
megaloman, Нет, для бэкапов, каждый день создается папка, формата dd-mm-yyyy, а в неё каждый час делаются бэкапы
архивы yyyymmddhhmm.rar
архивы yyyymmddhhmm.rar
-
megaloman
Re: Любой язык - [решено] Скрипт для копирования файлов/папок с заменой
Нашел вот такой скрипт
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
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
-
darkAge
Re: Любой язык - [решено] Скрипт для копирования файлов/папок с заменой
Код:
Для примера здесь в папке D:\Delete имеются подпапка с сегодняшним числом D:\Delete\22-03-2013 где хранятся файлы 20yymmddhhmm.rar
Эти файлы переписываются в D:\DDDDD, причем при записи каждого нового файла удалится старый файл, если он старше нового на неделю или более.
Код: Выделить всё
@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:\Delete имеются подпапка с сегодняшним числом D:\Delete\22-03-2013 где хранятся файлы 20yymmddhhmm.rar
Эти файлы переписываются в D:\DDDDD, причем при записи каждого нового файла удалится старый файл, если он старше нового на неделю или более.
CMD/BAT - [решено] Удаление старых архивов
-
megaloman
Re: Любой язык - [решено] Скрипт для копирования файлов/папок с заменой
Спасибо, походу дела- это то что нужно.
-
darkAge
Re: Любой язык - [решено] Скрипт для копирования файлов/папок с заменой
Спасибо, походу дела- это то что нужно.
-
darkAge
Re: Любой язык - [решено] Скрипт для копирования файлов/папок с заменой
Что-то не получается, думал что формат папки с датой не верный, я выше в примере указал dd-mm-yyyy, хотя на самом деле должно быть dd.mm.yyyy, ладно это не проблема привел папки к нужному формату, все равно не переносит,
И к стати скрипт смотрит дату создания или дату изменения файла? Я пока тестирую на другом компе, по этому перенес для проверки несколько файлов, естественно атрибуты не много изменились, дата создания отличается от даты изменения.
Системную дату поменял на месяц в перед, тоже не работает.
И к стати скрипт смотрит дату создания или дату изменения файла? Я пока тестирую на другом компе, по этому перенес для проверки несколько файлов, естественно атрибуты не много изменились, дата создания отличается от даты изменения.
Системную дату поменял на месяц в перед, тоже не работает.
-
megaloman
Re: Любой язык - [решено] Скрипт для копирования файлов/папок с заменой
Цитата:
И к стати скрипт смотрит дату создания или дату изменения файла?
Цитата:
каждый день создается папка, формата dd-mm-yyyy, а в неё каждый час делаются бэкапы архивы yyyymmddhhmm.rar
Скрипт анализирует имена файлов, а не время создания/изменения. Прочел Ваше сообщение только сегодня, попробую при наличии времени вспомнить задачу и у себя восстановить контрольный пример.
Так сходу, если сегодня 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
И к стати скрипт смотрит дату создания или дату изменения файла?
Цитата:
каждый день создается папка, формата dd-mm-yyyy, а в неё каждый час делаются бэкапы архивы yyyymmddhhmm.rar
Скрипт анализирует имена файлов, а не время создания/изменения. Прочел Ваше сообщение только сегодня, попробую при наличии времени вспомнить задачу и у себя восстановить контрольный пример.
Так сходу, если сегодня 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
-
darkAge
Re: Любой язык - [решено] Скрипт для копирования файлов/папок с заменой
Ага понятно, обозвал папку сегодняшним числом, файлы скопировал.
Но копировать то нужно из папок которые старше чем сегодня.
Но копировать то нужно из папок которые старше чем сегодня.
-
darkAge
Re: Любой язык - [решено] Скрипт для копирования файлов/папок с заменой
Извольте чётко поставить задачу. Я понимал так: есть сегодняшняя папка, мы сегодня запускаем скрипт, он копирует файлы в другую папку, вытесняя при этом старые более чем недельной давности. Что хотите Вы? По какому алгоритму?
Цитата:
имеется папка с бекапами, нужно что бы эта папка копировалась в определенное место, раз в сутки
Кстати, скрипт можно запускать многократно и он корректно будет копировать файлы, но папку он определяет сегодняшнюю - Вы так просили. Не проблема сделать на любое число, но определите, что Вам нужно? Я телепатией, увы, не страдаю.
Цитата:
имеется папка с бекапами, нужно что бы эта папка копировалась в определенное место, раз в сутки
Кстати, скрипт можно запускать многократно и он корректно будет копировать файлы, но папку он определяет сегодняшнюю - Вы так просили. Не проблема сделать на любое число, но определите, что Вам нужно? Я телепатией, увы, не страдаю.
