VBSРазное

VBS — Работа с дисками при помощи FSO

FileSystemObject

В VBS для работы с файлами существует FileSystemObject. Это специальный объект, для работы с файловой системой.

Для работы с ним необходимо использовать следующую конструкцию:

Dim FSO

Set FSO=CreateObject(«Scripting.FileSystemObject»)

Scripting — это имя библиотеки типов, а FileSystemObject — это имя объекта, который нужно создать.

Данная конструкцию объявляет переменную FSO и копирует туда объект FileSystemObject(в дальнейшем мы будем сокращать его до FSO).

Перед тем, как работать с чем-либо необходимо получить к этому доступ. Для этого используются следующие методы:

GetDrive() — Получить доступ к диску
GetFolder() — Получить доступ к папке
GetFile() — Получить доступ к файлу

Например, для получения доступа к папке C:\Windows нужно написать следующее продолжение вышеприведённого кода:

Set fold = fso.GetFolder(«c:\Windows»)

Работа с дисками

При помощи FSO можно работать с дисками. Как уже говорилось, алгоритм начала работы такой:

1. Объявляем переменную. Не обязательно такое же название, но оно наиболее логичное. А ещё, ваш код будет понятнее для других.

Dim FSO

2. Записываем в переменную FSO копию объекта FileSystemObject, который предназначен для работы с файловой системой Windows

Set FSO=CreateObject(«Scripting.FileSystemObject»)

3. Получаем доступ к диску в переменной drv

Set drv= fso.GetDrive(«c:\»)

Такое начало будет у вашего кода для работы с дисками. Итак, что же мы можем получить от FSO?

У нас в арсенале есть следующие методы(drv в следующих методах лишь для образца. А так, там вы будете указывать любую переменную, в которую получили доступ к какому-либо диску:

drv.VolumeName — Название тома(не C:\, именно название)

drv.TotalSize — Полный размер диска В БАЙТАХ

drv.FreeSpace — Свободное место на диске В БАЙТАХ

drv.SerialNumber — серийный номер жёсткого диска

drv.DriveLetter — буква, назначенная диску (без всяких : и :\)

drv.DriveType — тип диска(съёмный, не съёмный, сетевой, CD-ROM или RAM-диск)

drv.FileSystem — файловая система диска(FAT32, NTFS и т.д.)

drv.RootFolder — путь к корневой папке(для диска С — C:\)

drv.Path — то же, что и RootFolder, но вернёт он C: , без \

drv.IsReady — доступность диска в данный момент(True или False)

Получить список всех дисков: Set Drives = FSO.Drives

Здесь хотелось бы уточнить. Список получается в виде коллекции. Пример работы с коллекцией и с выводом приведу ниже:

001

DrivesCollection

В первой строчке кода мы объявляем переменные. Во второй строчке мы создаём копию объекта FSO. Далее в 3 строчке мы получаем коллекцию Drives, содержащую все диски на компьютере. Далее в 4 строчке мы начинаем цикл For Each, который означает, что для каждого элемента D коллекции Drives выполняем цикл. В цикле мы получаем DriveLetter элементу D коллекции Drives(строка 5). Вот примерно таким способом получаем список всех дисков.

В общем то, работа с дисками не такая интересная и полезная, но иногда может пригодиться. Поэтому, приведём лишь 1 пример задачу и перейдём к папкам.

Итак, наша задача — найти, какие есть диски на компьютере и вывести по ним информацию. Ниже решение:

002

Drive example

Всё очень просто. Главное — проверить что диск готов. Если нет — запрос информации по диску(имя, размер и т.д.) вызовет ошибку. Теперь, давайте перейдём к папкам. Это наиболее интересное, как мне кажется.