<?xml version="1.0" encoding="windows-1251"?> <package> <job id="Work"> <runtime> <description> Имя: Remove.wsf Автор: Verdugo Описание: </description> <example> Remove.wsf /days:14 /files:7 /folder:"D:\Backup"</example> <named name="days" helpstring="Количество дней, старше которых будут удаляться файлы" type="simple" required="false"/> <named name="file" helpstring="Минимальное количество файлов в папке. Если файлов меньше - обработка прекращается." type="simple" required="false"/> <named name="folder" helpstring="Путь к папке с файлами(и вложенными папками)" type="string" required="false"/> </runtime> <resource id="days">0</resource> <resource id="files">0</resource> <resource id="pc">none</resource> <resource id="folder">none</resource> <reference object="Scripting.FileSystemObject"/> <object id="fso" progid="Scripting.FileSystemObject"/> <object id="oXML" progid="MSXML2.DOMDocument.6.0"/> <object id="sh_net" progid="WScript.Network"/> <script language="VBScript"> <![CDATA[ '***************' Option Explicit ' '***************' Dim rNode, fNode, attr Dim days, files, folder Dim renew : renew = 0 '***************' Init_XML() If getResource("pc") <> sh_net.ComputerName Then First_Run() Init() Get_Folder(fso.GetFolder(folder)) MsgBox "Готово!" '********************************************************' '*********************** First_Run **********************' '********************************************************' Sub First_Run() rNode.selectSingleNode("/package/job[@id='Work']/resource[@id='pc']").text = sh_net.ComputerName oXML.save(WScript.ScriptFullName) WScript.Arguments.ShowUsage() WScript.Quit(0) End Sub '********************************************************' '************************* Init *************************' '********************************************************' Sub Init() days = CInt(getResource("days")) files = CInt(getResource("files")) folder = getResource("folder") If days = 0 Then Do days = InputBox("Введите количество дней, старше которых будут удаляться файлы","Ввод данных") Loop Until IsNumeric(days) renew = 1 End If If getResource("files") = 0 Then Do files = InputBox("Введите минимальное количество файлов","Ввод данных") Loop Until IsNumeric(files) renew = 1 End If If Not fso.FolderExists(getResource("folder")) Then Do folder = InputBox("Введите путь к папке с файлами","Ввод данных") Loop Until fso.FolderExists(folder) renew = 1 End If If days <= 0 Or files <= 0 Then WScript.Quit(0) If renew Then rNode.selectSingleNode("/package/job[@id='Work']/resource[@id='days']").text = days rNode.selectSingleNode("/package/job[@id='Work']/resource[@id='files']").text = files rNode.selectSingleNode("/package/job[@id='Work']/resource[@id='folder']").text = folder oXML.save(WScript.ScriptFullName) End If End Sub '********************************************************' '*********************** Init_XML ***********************' '********************************************************' Sub Init_XML() oXML.async = false oXML.load(WScript.ScriptFullName) If err.Number <> 0 Then err.Clear() MsgBox "Ошибка загрузки XML-документа" WScript.Quit(1) End If Set rNode = oXML.documentElement End Sub '********************************************************' '************************ New_XML ***********************' '********************************************************' Sub New_XML() oXML.async = false oXML.loadXML("") oXML.appendChild(oXML.createProcessingInstruction("xml", "version='1.0' encoding='windows-1251'")) Set rNode = oXML.appendChild(oXML.createElement("root")) End Sub '********************************************************' '********************** Get_Folder **********************' '********************************************************' Sub Get_Folder(folder) Dim item, file For Each item In folder.Subfolders Get_Folder(item) Next If folder.Files.Count > files Then New_XML For Each file In folder.Files Set fNode = rNode.appendChild(oXML.createElement("item")) Set attr = oXML.createAttribute("date") attr.value = Date2Long(DateValue(file.DateCreated)) fNode.setAttributeNode(attr) fNode.text = file.Path Next Dim sel, count count = rNode.selectNodes("/root/item[@date>='" & Date2Long(DateValue(Now())-days) & "']").length If count < files Then count = files - count Else count = 0 End If Set sel = rNode.selectNodes("/root/item[@date<'" & Date2Long(DateValue(Now())-days) & "']") Dim i For i = count To sel.length - 1 fso.DeleteFile sel(i).text Next End If End Sub '********************************************************' Function Date2Long(d) Date2Long = Year(d) & Right("0" & Month(d), 2) & Right("0" & Day(d), 2) End Function ]]> </script> </job> </package> |