Согласно плану по резервному копированию одним или двумя файлами резервной копии не отделаться, нужно несколько копий, с запасом , а еще нужно следить , чтобы этих файлов было приемленное колличество, т.к место все таки ограниченно. А еще , к примеру в Mysql, делая резервные копии, например, с помощью Mysql Administrator нужно старые копии удалять.
Для этих целей я написал .vbs скрипт, который решает несколько проблем:
1) Удаляет старые резервные копии файлов по дате
2) Следит и не удалит, при достижение минимального колличества файлов резервной копий
3) В одном скрипте можно описать все нужные каталоги сервера для удаления старых файлов
4)В каталоге с резерными копиями могут находится и другие файлы, скрипт их не затронет
Короче меньше, слов больше текста:
Текст скрипта с комментариями:
'скрипт удаления файлов в каталоге по дате из каталога
'оставляет файлы при достижение минимального кол-ва файлов в каталоге
Const adDate = 7
Const adVarChar = 200
Dim objFile 'файлы в каталоге
Const delTime = 14 ' дней для старых файлов maska ="^новый" ' шаблон файлов для удаления countfiles=0 ' переменная для подсчета файлов
' Создание объектов оболочки и файловой системы Set oShell = CreateObject("wscript.shell")
Set oFSO = CreateObject("Scripting.Filesystemobject")
' Определение путей папок Catalog1 = oShell.ExpandEnvironmentStrings("C:test")
'создание ссылки для управления регулярными выражениями Set Re = New RegExp
Re.Pattern = Maska
Re.IgnoreCase = True ' игнор регистра
' Проверка или Создание журнала логов работы сценария sLogFileName = "C:testdelete_Files_log"
sLogFileName = Replace(sLogFileName, ".", "_")
sLogFileName = Replace(sLogFileName, "/", "_")
if ofso.FileExists(sLogFileName & ".log") then
Set oLogFile = oFSO.OpenTextFile(sLogFileName & ".log",8,true)
else
Set oLogFile = oFSO.CreateTextFile(sLogFileName & ".log",true)
end if
oLogFile.WriteLine Now& "========== Start deleting =========="
'strFolder = "C:test"
'Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
'Запуск наших процеду по удалению 1-й параметр каталог для удаления 2- кол-во минимальных файлов , 3- дней после которых можно удалять CountNumbeFiles catalog1,4 ,14
'после можно описать и друигик каталоги, нужно только ' maska ="^новый" - поменять маску если надо ' Re.Pattern = Maska ' Catalog1 = oShell.ExpandEnvironmentStrings("C:test") - указать каталог , или оставить старый ' CountNumbeFiles catalog1,4 ,14 - теперь вызываем для нового каталога
oLogFile.WriteLine Now& "========== End deleting =========="
oLogFile.Close
WScript.Quit 0
Sub deleteFiles(sFolderPath,cnt,dt)
'создание рекорд сета With WScript.CreateObject("ADODB.Recordset")
With .Fields
.Append "Path", adVarChar, 2^15 - 1
.Append "DateLastModified", adDate
End With
.Open
.Sort = "DateLastModified DESC" ' сортировка записей ''добавляем в рекордсет только необходимые файлы For Each objFile In oFSO.GetFolder(sFolderPath).Files
if re.test(objfile.Name) then
.AddNew Array("Path", "DateLastModified"), Array(objFile.Path, objFile.DateLastModified)
end if
Next
.Movefirst
'переход на cnt позицию, минимум , которые не удаляется .Move cnt,0
Do Until .EOF
With .Fields
'MsgBox .Item("Path").Value set objFile =oFso.GetFile( .Item("Path").Value)
' Проверка, является ли файл устаревшим,если да удаляем If (Date-objFile.DateLastModified) > dt and (Date-objFile.DateCreated) >dt Then
oLogFile.Writeline .Item("Path").Value & vbTab & .Item("DateLastModified").Value
'WScript.Echo .Item("DateLastModified").Value, vbTab, .Item("Path").Value ' Удаление устаревшего файла oFSO.DeleteFile objFile.Path, True
end if
End With
.MoveNext
Loop
.Close
End With
end sub
'Процедура проверки кол-ва наших файлов и затем их удаления sFolderPath - каталог,cnt - минимальное кол-во файлов Sub CountNumbeFiles(sFolderPath,cnt, dt)
If oFSO.FolderExists(sFolderPath) Then
' Создание объекта Folder Set oFolder = oFSO.GetFolder(sFolderPath)
' Получение коллекции файлов Set colFiles = oFolder.Files
' Обработка каждого файла из коллекции For each oFile in colFiles
' сравниваем имя с шаблоном -если нащ файл то плюсум кол-во if re.test(ofile.Name) then
'здесь подсчет файлов будет countfiles=countfiles+1
end if
Next
'выход если файлов меньше нужного if countfiles<cnt then
'MsgBox "файлов бля мало" oLogFile.WriteLine "Файлы не удалялись, т.к кол-во меньше минимального"
'oLogFile.Close ExitSub ' выход их процедуры, если мало файлов
else
' ВОТ ЗДЕСЬ происходит выхов удаления 1 ый параметр каталог, 2- дата удаление кол deleteFiles sFolderPath,cnt, dt
end if
Else ' каталог не найден , запись в лог файл. 'WScript.Echo "Can't find folder [" & strFolder & "]" oLogFile.WriteLine date& "Не найлен каталог" & sFolderPath
End If
end sub
Const adDate = 7
Const adVarChar = 200
Dim objFile 'файлы в каталоге
Const delTime = 14 ' дней для старых файлов maska ="^новый" ' шаблон файлов для удаления countfiles=0 ' переменная для подсчета файлов
' Создание объектов оболочки и файловой системы Set oShell = CreateObject("wscript.shell")
Set oFSO = CreateObject("Scripting.Filesystemobject")
' Определение путей папок Catalog1 = oShell.ExpandEnvironmentStrings("C:test")
'создание ссылки для управления регулярными выражениями Set Re = New RegExp
Re.Pattern = Maska
Re.IgnoreCase = True ' игнор регистра
' Проверка или Создание журнала логов работы сценария sLogFileName = "C:testdelete_Files_log"
sLogFileName = Replace(sLogFileName, ".", "_")
sLogFileName = Replace(sLogFileName, "/", "_")
if ofso.FileExists(sLogFileName & ".log") then
Set oLogFile = oFSO.OpenTextFile(sLogFileName & ".log",8,true)
else
Set oLogFile = oFSO.CreateTextFile(sLogFileName & ".log",true)
end if
oLogFile.WriteLine Now& "========== Start deleting =========="
'strFolder = "C:test"
'Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
'Запуск наших процеду по удалению 1-й параметр каталог для удаления 2- кол-во минимальных файлов , 3- дней после которых можно удалять CountNumbeFiles catalog1,4 ,14
'после можно описать и друигик каталоги, нужно только ' maska ="^новый" - поменять маску если надо ' Re.Pattern = Maska ' Catalog1 = oShell.ExpandEnvironmentStrings("C:test") - указать каталог , или оставить старый ' CountNumbeFiles catalog1,4 ,14 - теперь вызываем для нового каталога
oLogFile.WriteLine Now& "========== End deleting =========="
oLogFile.Close
WScript.Quit 0
Sub deleteFiles(sFolderPath,cnt,dt)
'создание рекорд сета With WScript.CreateObject("ADODB.Recordset")
With .Fields
.Append "Path", adVarChar, 2^15 - 1
.Append "DateLastModified", adDate
End With
.Open
.Sort = "DateLastModified DESC" ' сортировка записей ''добавляем в рекордсет только необходимые файлы For Each objFile In oFSO.GetFolder(sFolderPath).Files
if re.test(objfile.Name) then
.AddNew Array("Path", "DateLastModified"), Array(objFile.Path, objFile.DateLastModified)
end if
Next
.Movefirst
'переход на cnt позицию, минимум , которые не удаляется .Move cnt,0
Do Until .EOF
With .Fields
'MsgBox .Item("Path").Value set objFile =oFso.GetFile( .Item("Path").Value)
' Проверка, является ли файл устаревшим,если да удаляем If (Date-objFile.DateLastModified) > dt and (Date-objFile.DateCreated) >dt Then
oLogFile.Writeline .Item("Path").Value & vbTab & .Item("DateLastModified").Value
'WScript.Echo .Item("DateLastModified").Value, vbTab, .Item("Path").Value ' Удаление устаревшего файла oFSO.DeleteFile objFile.Path, True
end if
End With
.MoveNext
Loop
.Close
End With
end sub
'Процедура проверки кол-ва наших файлов и затем их удаления sFolderPath - каталог,cnt - минимальное кол-во файлов Sub CountNumbeFiles(sFolderPath,cnt, dt)
If oFSO.FolderExists(sFolderPath) Then
' Создание объекта Folder Set oFolder = oFSO.GetFolder(sFolderPath)
' Получение коллекции файлов Set colFiles = oFolder.Files
' Обработка каждого файла из коллекции For each oFile in colFiles
' сравниваем имя с шаблоном -если нащ файл то плюсум кол-во if re.test(ofile.Name) then
'здесь подсчет файлов будет countfiles=countfiles+1
end if
Next
'выход если файлов меньше нужного if countfiles<cnt then
'MsgBox "файлов бля мало" oLogFile.WriteLine "Файлы не удалялись, т.к кол-во меньше минимального"
'oLogFile.Close ExitSub ' выход их процедуры, если мало файлов
else
' ВОТ ЗДЕСЬ происходит выхов удаления 1 ый параметр каталог, 2- дата удаление кол deleteFiles sFolderPath,cnt, dt
end if
Else ' каталог не найден , запись в лог файл. 'WScript.Echo "Can't find folder [" & strFolder & "]" oLogFile.WriteLine date& "Не найлен каталог" & sFolderPath
End If
end sub
Копируем его в .txt файлик, присваем расширение .vbs, поправляем под свои нужды
and Enjoy it!
Кстати, подстветка синтаксиса может быть ошибочна, как получилось, и второе , советую его сначало оттестить, хотя у меня на прошлом месте работы он работает успешно.
И еще , большое спасибо ресурсу http://script-coding.com/Browse.html#VBScript - там много инфы про скриптовые языки, кода, а так же хороший форум.
Комментариев нет :
Отправить комментарий