AlexStud
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Всем привет! Покритикуйте, плиз, скрипт... Совсем начинающий, много чего еще не знаю, поэтому просю оценить, предлагать варианты модификации и технологии и т.д. и т.п. Скрипт раскладывает файлы из корневой директории в папки по годам и по месяцам, на основании свойства LastModified, файлы меньше 4096 байт удаляет. Код: Option Explicit 'On Error Resume Next Dim strComputer, wmiNS, wmiQuery Dim objWMIService, objFSO, objFile, objF, objItem Dim colFiles, colItems Dim strMonth, strYear, strFolder, strPath, strPathMove Dim SMTPServer, Recipient, From, Subject, Message, msg wmiNS = "\root\CIMV2" strComputer = "." wmiQuery = "SELECT Name, FileSize, LastModified FROM CIM_DataFile WHERE Path = '\\Fax\\XXXXXXX\\'" strPath = "d:\fax\XXXXXXX\" Set objFSO = CreateObject("Scripting.FileSystemObject") Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & wmiNS) Set colFiles = objWMIService.ExecQuery (wmiQuery) For Each objFile In colFiles If objFile.FileSize < 4096 Then objFile.Delete Else strMonth = Mid(objFile.LastModified, 5, 2) strYear = Left(objFile.LastModified, 4) strFolder = strMonth & "." & strYear & "\" strPathMove = strPath & strYear & "\" & strFolder SubCheckFolder strYear, strPath, strPathMove Set objF = objFSO.GetFile(objFile.Name) objF.Move strPathMove End If Next GenericSendmail SMTPserver, From, Recipient, Subject, Message Sub SubCheckFolder (strYear, strPath, strPathMove) If objFSO.FolderExists(strPath & strYear & "\") Then If objFSO.FolderExists(strPathMove) Then Else objFSO.CreateFolder(strPathMove) End If Else objFSO.CreateFolder(strPath & strYear & "\") objFSO.CreateFolder(strPathMove) End If End Sub Sub GenericSendmail (SMTPserver, From, Recipient, Subject, Message) SMTPServer = "outlook.contora.ru" Recipient = "admin@contora.ru, a@contora.ru" From = "admin@contora.ru" Subject = "Факсы разобранны!" Message = "Факсы разобранны!!!" & vbcrlf & "Ура!!!" set msg = WScript.CreateObject("CDO.Message") msg.From = From msg.To = Recipient msg.Subject = Subject msg.TextBody = Message msg.Configuration.Fields ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = SMTPServer msg.Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 msg.Configuration.Fields.Update msg.Send End Sub | Но вот есть вопрос... Я в итоге сделал перемещение через FileSystemObject: Код: If objFile.FileSize < 4096 Then objFile.Delete Else strMonth = Mid(objFile.LastModified, 5, 2) strYear = Left(objFile.LastModified, 4) strFolder = strMonth & "." & strYear & "\" strPathMove = strPath & strYear & "\" & strFolder SubCheckFolder strYear, strPath, strPathMove Set objF = objFSO.GetFile(objFile.Name) objF.Move strPathMove End If | Хотя есть метод .Copy и код мог бы выглядеть приятней: Код: If objFile.FileSize < 4096 Then objFile.Delete Else strMonth = Mid(objFile.LastModified, 5, 2) strYear = Left(objFile.LastModified, 4) strFolder = strMonth & "." & strYear & "\" strPathMove = strPath & strYear & "\" & strFolder objFile.Copy(strPathMove) objFile.Delete End If | Но так у меня не заработало... Удалять удаляет, замечательно даже удаляет. Но вот копировать никак. Все хотелось бы сделать через WMI без использования FileSystemObject. Да и как папки через WMI создавать чего-то не могу найти, возможно ли?... И еще один вопрос... Вот здесь: Цитата: If objFile.FileSize < 4096 Then | на выходе свойства .FileSize объекта objFile тип данных uint64 и, соответственно, если я создам переменную для величины 4096, оператор сравнения будет выдавать не правильный результат. Я хочу чтобы код выглядел примерно следующим образом, и не врал... Цитата: Dim FileSize FileSize = 4096 ... If objFile.FileSize < FileSize Then ... | | Всего записей: 28 | Зарегистр. 07-12-2002 | Отправлено: 14:00 01-02-2007 | Исправлено: AlexStud, 14:15 01-02-2007 |
|