Основні можливості роботи з об'єктами файлової системи через WSH реалізовані за допомогою класу FileSystemObject. який фізично перебуває в бібліотеці Scrrun. dll. Як правило, робота починається зі створення об'єкта FSO:
Set fso1 = WScript.CreateObject ( "Scripting.FileSystemObject")
Далі використовуємо створений об'єкт для виконання різних операцій.
Найбільш часто використовувані можливості:
Set oDrives = fso1.Drives
For Each i In oDrives
MsgBox ( "Буква диска:" i.DriveLetter "Тип диска:" i.DriveType "Метка диска:" i.VolumeName "Готовність до роботи:" i.IsReady)
Детальніше про об'єкт Drive - нижче.
2) отримати список всіх підкаталогів даного каталогу (використовується властивість GetFolder і далі можливості об'єкта Folder):
Set oFolders = fso1.GetFolder ( "C:")
Set oSubfolders = oFolders.SubFolders
For Each oFolder In oSubFolders
strListFolders = strListFolders oFolder.Name vbCrLf
3) отримати інформацію про фізичному розмірі диска (властивість об'єкта Drive TotalSize):
Set oDrive1 = fso1.GetDrive ( "C")
nSize = FormatNumber (oDrive1.TotalSize, 0)
4) отримати інформацію про розмір вільного простору (властивості об'єкта Drive FreeSpace і AvailableSpace; FreeSpace виводить інформацію про фізичному вільному просторі, AvailableSpace - інформацію про вільний простір, доступному активного користувача - з урахуванням дискової квоти)
Set oDrive1 = fso1.GetDrive ( "C")
nSize = FormatNumber (oDrive1.TotalSize, 0)
Аналогічно проводиться переміщення і видалення папок.
6) видалити всі файли з певним ім'ям (наприклад, боротьба з вірусами або комп'ютерними іграшками). Саме видалення зробити нескладно: для цього використовується метод DeleteFile:
fso1. DeleteFile "C: \ scandisk. Log", True 'trueозначает, що видаляємо в тому числі і read- onlyфайли
Однак зазвичай потрібно вирішити ще два завдання:
o забезпечити відсутність run - time error. якщо проблеми з видалення файлу (файл відкритий і т.п.)
o підключитися до потрібного каталогу
o пройти по всіх каталогах і підкаталогам, видаляючи даний файл.
Кожну з цих завдання зручніше вирішувати за допомогою окремих подпроцедур. Перша вирішується так:
On Error Resume Next
If Err.Number <> 0 Then
WScript.Echo "Error deleting file:" sFile
Для простоти ми виводимо повідомлення користувачу, проте в реальній роботі краще в разі виникнення помилки писати протокол в текстовий файл для адміністратора (про це пізніше).
Щоб підключитися до потрібного подкаталогу:
Function GetFolder (sFolder)
On Error Resume Next
Set GetFolder = Fso1.GetFolder (sFolder)
If Err.Number <> 0 Then
WScript.Echo "Error connecting to folder:" sFolder
Щоб пройтися по всіх підкаталогам:
Sub RunSubFolders (objFolder)
If objFolder <> "\ System Volume Information" Then
For Each iFolder in objFolder.SubFolders
Перевірка на System Volume Information - тому що при зверненні до нього виникає помилка.
Тепер вирішуємо нашу задачу:
Set objDir = GetFolder (sDir)
Sub MainSub (objDir)
For Each eFile in objDir.Files
If LCase (eFile.Name) = LCase (sFile) Then
Звичайно, в реальній роботі краще протоколювати видалити всі файли.
7) поміняти атрибути файлу (наприклад, приховати важливі файли мул встановити для них режим read - only).
Для підключення до існуючого файлу найкраще використовувати спеціальну подпроцедуру GetFile (аналог GetFolder в попередньому прикладі):
On Error Resume Next
Set GetFile = Fso1.GetFile (sFile)
If Err.Number <> 0 Then
WScript.Echo ( "Error Connecting to:" sFile
Встановити найпростіше так (в нашому прикладі встановлюємо значення Read - Only):
Set gFile = GetFile ( "C: \ test1.txt")
8) прочитати інформацію з текстового файлі
Set TxtStream = fso1.OpenTextFile ( "\\ london1 \ c $ \ test1.txt")
Do While Not (TxtStream.atEndOfStream)
Text = Text TxtStream.ReadLine vbCrlf
Великі файли настійно рекомендується відкривати на читання в вікні 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"
Set MyFile = fso1.CreateTextFile ( "C: \ test1.txt")
MyFile.WriteLine "Рядок 1"
MyFile.WriteLine "Рядок 2"
Обмеження WSH при роботі з файловою системою:
- WSH в принципі не вміє працювати з двійковими файлами - тільки текстовими;
- за допомогою WSH можна налаштувати дозволу і аудит для файлів (це можна зробити засобами WMI).
Багато додаткові можливості роботи в файлової системі можна отримати за допомогою утиліт командного рядка з Resource Kit: