Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Скрипт для копирования файлов/папок с заменой

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

Новый участник


Сообщения: 26
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 16:35, 20-03-2013

 

Новый участник


Сообщения: 26
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 10:39, 21-03-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 26
Благодарности: 1

Профиль | Отправить 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


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить 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:\Delete имеются подпапка с сегодняшним числом D:\Delete\22-03-2013 где хранятся файлы 20yymmddhhmm.rar
Эти файлы переписываются в D:\DDDDD, причем при записи каждого нового файла удалится старый файл, если он старше нового на неделю или более.

Пересчет даты заимствовал здесь

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 26-03-2013 в 23:15.

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:55, 22-03-2013 | #4


Новый участник


Сообщения: 26
Благодарности: 1

Профиль | Отправить PM | Цитировать


Спасибо, походу дела- это то что нужно.

Отправлено: 11:03, 23-03-2013 | #5


Новый участник


Сообщения: 26
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 11:31, 26-03-2013 | #6


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Цитата:
И к стати скрипт смотрит дату создания или дату изменения файла?
Цитата:
каждый день создается папка, формата 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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 26-03-2013 в 12:19.

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:48, 26-03-2013 | #7


Новый участник


Сообщения: 26
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 13:10, 26-03-2013 | #8


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:47, 26-03-2013 | #9


Новый участник


Сообщения: 26
Благодарности: 1

Профиль | Отправить 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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Скрипт для копирования файлов/папок с заменой

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход