Робота з об'єктами файлової системи з скрипта vbscript

Основні можливості роботи з об'єктами файлової системи через 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: