|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
8. Работа с объектами файловой системыРабота с объектами файловой системы из скрипта VBScript, объектная библиотека ScriptingRuntime, объекты FileSystemObject, Drive, Folder, File, TextStream, просмотр всех каталогов на диске, запись/чтение информации из текстового файла Основные возможности работы с объектами файловой системы через WSH реализованы при помощи класса FileSystemObject, который физически находится в библиотеке Scrrun.dll. Как правило, работа начинается с создания объекта FSO: Dim fso1 Set fso1 = WScript.CreateObject("Scripting.FileSystemObject") Далее используем созданный объект для выполнения различных операций. Наиболее часто используемые возможности: 1) просмотреть/запротоколировать информацию о всех дисках на компьютере (используется свойство Drives, возвращающее набор дисков, и свойства объекта Drive): Set oDrives = fso1.Drives For Each i In oDrives MsgBox ("Буква диска: " & i.DriveLetter & " Тип диска: " & i.DriveType & "Метка диска: " & i.VolumeName & " Готовность к работе: " & i.IsReady) Next Подробнее про объект Drive - ниже. 2) получить список всех подкаталогов данного каталога (используется свойство GetFolder и далее возможности объекта Folder): Set oFolders = fso1.GetFolder("C:\") Set oSubfolders = oFolders.SubFolders For Each oFolder In oSubFolders strListFolders = strListFolders & oFolder.Name & vbCrLf Next MsgBox strListFolders 3) получить информацию о физическом размере диска (свойство объекта Drive TotalSize): Set oDrive1 = fso1.GetDrive("C") nSize = FormatNumber (oDrive1.TotalSize,0) MsgBox nSize 4) получить информацию о размере свободного пространства (свойства объекта Drive FreeSpace и AvailableSpace; FreeSpace выводит информацию об физическом свободном пространстве, AvailableSpace - информацию о свободном пространстве, доступном текущему пользователю - с учетом дисковой квоты) Set oDrive1 = fso1.GetDrive("C") nSize = FormatNumber (oDrive1.TotalSize,0) MsgBox nSize 5) скопировать каталог со всем содержимым (используется метод CopyFolder, true означает - перезаписывать содержимое, используется по умолчанию, поэтому можно не указывать) fso1.CopyFolder "C:\Diagnostics", "d:\Diagnostics", true Аналогично производится перемещение и удаление папок. 6) удалить все файлы с определенным именем (например, борьба с вирусами или компьютерными игрушками). Само удаление произвести несложно: для этого используется метод DeleteFile: fso1.DeleteFile "C:\scandisk.log", True 'true означает, что удаляем в том числе и read-only файлы Однако обычно нужно решить еще две задачи: o обеспечить отсутствие run-time error, если проблемы с удаление файла (файл открыт и т.п.) o подключиться к нужному каталогу o пройти по всем каталогам и подкаталогам, удаляя данный файл. Каждую из этих задача удобнее решать при помощи отдельных подпроцедур. Первая решается так: Sub FileDelete(sFile) On Error Resume Next Fso1.DeleteFile (sFile) If Err.Number <> 0 Then WScript.Echo "Error deleting file: " & sFile End If End Sub Для простоты мы выводим сообщение пользователю, однако в реальной работе лучше в случае возникновения ошибки писать протокол в текстовый файл для администратора (об этом позже). Чтобы подключиться к нужному подкаталогу: Function GetFolder (sFolder) On Error Resume Next Set GetFolder = Fso1.GetFolder (sFolder) If Err.Number <> 0 Then WScript.Echo "Error connecting to folder: " & sFolder WScript.Quit Err.Number End If End Function Чтобы пройтись по всем подкаталогам: Sub RunSubFolders (objFolder) If objFolder <> "\System Volume Information" Then MainSub objFolder For Each iFolder in objFolder.SubFolders RunSubFolders iFolder Next End If End Sub Проверка на System Volume Information - потому что при обращении к нему возникает ошибка. Теперь решаем нашу задачу: sDir = "C:" sFile = "lines.exe" Set objDir = GetFolder (sDir) RunSubFolders (objDir) Sub MainSub (objDir) For Each eFile in objDir.Files If LCase(eFile.Name) = LCase(sFile) Then FileDelete eFile End If Next End Sub Конечно, в реальной работе лучше протоколировать удаление всех файлов. 7) поменять атрибуты файла (например, скрыть важные файлы ил установить для них режим read-only). Для подключения к существующему файлу лучше всего использовать специальную подпроцедуру GetFile (аналог GetFolder в предыдущем примере): Function GetFile(sFile) On Error Resume Next Set GetFile = Fso1.GetFile(sFile) If Err.Number <> 0 Then WScript.Echo("Error Connecting to: " & sFile WScript.Quit Err.Number End If End Function Атрибуты файла определяются как битовая маска - значение свойства Attributes. Просмотреть возможные значения можно через справку по WSH 5.6, Attributes property. Установить проще всего так (в нашем примере устанавливаем значение Read-Only): Set gFile = GetFile ("C:\test1.txt") gFile.Attributes = 1 8) прочесть информацию из текстового файле Set TxtStream = fso1.OpenTextFile("\\london1\c$\test1.txt") Do While Not (TxtStream.atEndOfStream) Text = Text & TxtStream.ReadLine & vbCrlf Loop MsgBox Text Большие файлы настоятельно рекомендуется открывать на чтение в окне Internet Explorer тем же методом Navigate. 9) запись / добавление информации к текстовому файлу. Эта возможность используется очень часто - например, для протоколирования хода выполнения скрипта или фиксирования результатов обследования компьютеров пользователей. В некоторых ситуациях файл можно обрабатывать дальше - например, переслать его по электронной почте средствами CDO (об этом в следующих модулях) или средствами DTS положить на сервер баз данных. Выглядит это так: If Fso1.FileExists ("C:\test1.txt") Then Set txtStreamOut = fso1.OpenTextFile("C:\test1.txt",8,True) ' "2" означает "открыть на добавление", True - писать в Unicode txtStreamOut.WriteLine "Строка 1" txtStreamOut.WriteLine "Строка 1" Else Set MyFile = fso1.CreateTextFile("C:\test1.txt") MyFile.WriteLine "Строка 1" MyFile.WriteLine "Строка 2" End If Ограничения WSH при работе с файловой системой:
Многие дополнительные возможности работы в файловой системе можно получить при помощи утилит командной строки из Resource Kit:
Скопировать/перенести файлы с сохранением всех разрешений (например, на новый файл-сервер) позволяет обычный FAR (или стандартная утилита Microsoft XCOPY).
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Получить учебные материалы по этому курсу
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||