Любой язык - [решено] Скрипт для копирования файлов/папок с заменой

Аватара пользователя
darkAge

Любой язык - [решено] Скрипт для копирования файлов/папок с заменой

Сообщение darkAge »

Всем здрасьте )) , в общем поставили передо мной такую задачу, имеется папка с бекапами, нужно что бы эта папка копировалась в определенное место, раз в сутки, а по истечении 7 дней, заменялись на новые по одному (по принципу как в видео регистраторе)

Подскажите как это реализовать, идея есть через xcopy, но она может копировать файлы по изменению в определенный день, либо после, а надо что бы более старые затирались.
Аватара пользователя
darkAge

Re: Любой язык - [решено] Скрипт для копирования файлов/папок с заменой

Сообщение darkAge »

megaloman, Нет, для бэкапов, каждый день создается папка, формата dd-mm-yyyy, а в неё каждый час делаются бэкапы

архивы yyyymmddhhmm.rar
Аватара пользователя
megaloman

Re: Любой язык - [решено] Скрипт для копирования файлов/папок с заменой

Сообщение megaloman »

Нашел вот такой скрипт



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: Любой язык - [решено] Скрипт для копирования файлов/папок с заменой

Сообщение darkAge »

Код:

Код: Выделить всё

@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 - [решено] Удаление старых архивов
Аватара пользователя
darkAge

Re: Любой язык - [решено] Скрипт для копирования файлов/папок с заменой

Сообщение darkAge »

Что-то не получается, думал что формат папки с датой не верный, я выше в примере указал dd-mm-yyyy, хотя на самом деле должно быть dd.mm.yyyy, ладно это не проблема привел папки к нужному формату, все равно не переносит,

И к стати скрипт смотрит дату создания или дату изменения файла? Я пока тестирую на другом компе, по этому перенес для проверки несколько файлов, естественно атрибуты не много изменились, дата создания отличается от даты изменения.

Системную дату поменял на месяц в перед, тоже не работает.
Аватара пользователя
megaloman

Re: Любой язык - [решено] Скрипт для копирования файлов/папок с заменой

Сообщение megaloman »

Цитата:



И к стати скрипт смотрит дату создания или дату изменения файла?




Цитата:



каждый день создается папка, формата 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 »

Ага понятно, обозвал папку сегодняшним числом, файлы скопировал.

Но копировать то нужно из папок которые старше чем сегодня.
Аватара пользователя
darkAge

Re: Любой язык - [решено] Скрипт для копирования файлов/папок с заменой

Сообщение darkAge »

Извольте чётко поставить задачу. Я понимал так: есть сегодняшняя папка, мы сегодня запускаем скрипт, он копирует файлы в другую папку, вытесняя при этом старые более чем недельной давности. Что хотите Вы? По какому алгоритму?
Цитата:



имеется папка с бекапами, нужно что бы эта папка копировалась в определенное место, раз в сутки



Кстати, скрипт можно запускать многократно и он корректно будет копировать файлы, но папку он определяет сегодняшнюю - Вы так просили. Не проблема сделать на любое число, но определите, что Вам нужно? Я телепатией, увы, не страдаю. Изображение
Ответить

Вернуться в «Скриптовые языки администрирования Windows»