Перейти на главную страничку сайта (список статей, файлы для скачивания)
Примеры кода в статье приводятся на языке VBScript для административных сценариев Windows. Приведённые ниже примеры не исчерпывают всех возможностей классов, которые в них упоминаются (используются). Для получения полной информации обращайтесь к MSDN. Как правило, поиск в MSDN названия того или иного класса позволяет быстро получить перечень (описание) всех его свойств и методов.
Работа с файловой системой в скриптах возможна как с помощью WSH-объекта FileSystemObject, так и с помощью WMI. Преимущества WMI перед объектом FileSystemObject заключаются в следующем:
Преимущества FileSystemObject перед WMI заключаются в следующем:
Класс Win32_DiskPartition позволяет получить информацию о всех разделах физического жёсткого диска. Пример получения информации:
On Error Resume Next Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2") If Err.Number <> 0 Then WScript.Echo Err.Number & ": " & Err.Description WScript.Quit End If For Each objDP In objService.ExecQuery("SELECT * FROM Win32_DiskPartition") WScript.Echo objDP.Caption 'краткое описание раздела WScript.Echo objDP.Name 'имя раздела WScript.Echo objDP.DeviceID 'строковый уникальный идентификатор раздела WScript.Echo objDP.Description 'описание раздела WScript.Echo objDP.Type 'описание раздела WScript.Echo objDP.DiskIndex 'номер диска, содержащего данный раздел WScript.Echo objDP.Index 'номер данного раздела WScript.Echo objDP.Bootable 'признак загрузочного раздела (булево) WScript.Echo objDP.BootPartition 'признак активности раздела (булево) '(операционная система использует активный раздел для загрузки с жесткого диска) WScript.Echo objDP.PrimaryPartition 'признак первичного (основного загрузочного) раздела (булево) WScript.Echo objDP.BlockSize 'размер блока в байтах WScript.Echo objDP.NumberOfBlocks 'общее число блоков в разделе. 'Размер раздела может быть вычислен путем умножения значений свойств NumberOfBlocks и BlockSize. WScript.Echo objDP.Size 'размер раздела в байтах WScript.Echo objDP.StartingOffset 'начальное смещение раздела в байтах WScript.Echo objDP.SystemName 'имя компьютера WScript.Echo Next
Класс Win32_LogicalDisk позволяет получить информацию как о локальных, так и о подключённых сетевых логических дисках. Однако, рекомендуется использовать этот класс для получения сведений о локальных логических дисках, а для получения сведений о подключённых сетевых дисках использовать класс Win32_MappedLogicalDisk, аналогичный по составу свойств. Пример получения информации:
On Error Resume Next Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2") If Err.Number <> 0 Then WScript.Echo Err.Number & ": " & Err.Description WScript.Quit End If For Each objDP In objService.ExecQuery("SELECT * FROM Win32_LogicalDisk") WScript.Echo objDP.Caption 'краткое описание WScript.Echo objDP.Name 'имя диска WScript.Echo objDP.DeviceID 'уникальный идентификатор диска WScript.Echo objDP.Description 'описание типа диска WScript.Echo objDP.DriveType 'численное значение, соответствующее типу дискового накопителя: '0 Unknown '1 No Root Directory '2 Removable Disk '3 Local Disk '4 Network Drive '5 Compact Disc '6 RAM Disk WScript.Echo objDP.Compressed 'указывает, рассматривается ли логический диск системой 'как единый сжатый объект, например, как том DoubleSpace; если поддерживается пофайловое 'сжатие (как для NTFS), значение свойства равно FALSE. WScript.Echo objDP.FileSystem 'тип файловой системы WScript.Echo objDP.FreeSpace 'доступное свободное место в байтах WScript.Echo objDP.Size 'размер логического диска в байтах WScript.Echo objDP.MaximumComponentLength 'содержит максимальную длину имени файла, поддерживаемую 'накопителем. Значение может быть использовано для указания того, что длинные имена поддерживаются данной 'файловой системой. Например, для файловой системы FAT32, поддерживающей длинные имена, это свойство хранит 'значение 255. WScript.Echo objDP.ProviderName 'сетевой путь к подключённому сетевому диску WScript.Echo objDP.SystemName 'имя компьютера WScript.Echo objDP.VolumeName 'метка тома WScript.Echo objDP.VolumeSerialNumber 'серийный номер тома логического диска WScript.Echo Next
Класс Win32_Directory представляет папку в системе Win32. Папка является разновидностью файла, логически группирующей файлы данных. Примечание: корневой каталог диска (например, "c:\") также является папкой. Вот описание некоторых свойств класса (все свойства - только для чтения):
Свойство | Описание |
---|---|
Caption Name Description |
Краткое описание объекта. Фактически - путь без завершающего слеша (для корневого каталога - с завершающим слешем). |
Path | Путь к родительскому каталогу с завершающим слешем без буквы диска. Например, для папки "C:\WINDOWS\system32" это будет "\WINDOWS\". Для папки "C:\WINDOWS" - "\". Для папки "C:\" - пустая строка. |
EightDotThreeFileName | Полный путь с DOS-совместимым именем папки. Например, для папки "c:\documents and settings\all users" это будет "c:\documents and settings\alluse~1". Для корневого каталога - пустая строка. |
Drive | Буква диска с двоеточием. |
FileName | Имя папки. Например, для папки "c:\documents and settings" это будет "Documents and Settings". Для корневого каталога - пустая строка. |
Extension | Расширение имени папки. Например, для папки "c:\myfolder.zyx" это будет "zyx". |
CreationDate | Дата и время создания папки. Для корневого каталога - Null. |
LastAccessed | Дата и время последнего доступа к папке. Для корневого каталога - Null. |
Compressed | Булево значение, указывающее на то, что папка была сжата. Для корневого каталога - Null. |
Hidden | Булево значение, указывающее на атрибут папки "скрытый". Для корневого каталога - Null. |
System | Булево значение, указывающее на атрибут папки "системный". Для корневого каталога - Null. |
Writeable | Булево значение, указывающее на то, что папка может быть записана. Для корневого каталога - Null. |
Archive | Булево значение, указывающее на атрибут папки "архивный" (папка готова для архивирования). Для корневого каталога - Null. |
FileType | Строка, описывающая тип файла по его расширению (по данным реестра). Для папок - всегда "File Folder" или подобное. Для корневого каталога - "Local Disk". |
FSName | Тип файловой системы. Например, "NTFS". |
CSName | Имя компьютера. |
Следующий сценарий выводит дату создания всех папок на всех дисках, в название которых входит слово "Документы" с маленькой или с большой буквы. Примечание: объект "WbemScripting.SWbemDateTime" применяется для конвертации даты в более удобный формат.
On Error Resume Next Set objDateTime = CreateObject("WbemScripting.SWbemDateTime") Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2") If Err.Number <> 0 Then WScript.Echo Err.Number & ": " & Err.Description WScript.Quit End If Set colFolders = objService.ExecQuery("SELECT * FROM Win32_Directory WHERE " & _ "FileName LIKE '%[Дд]окументы%'") For Each objFolder In colFolders WScript.Echo objFolder.Name objDateTime.Value = objFolder.CreationDate WScript.Echo objDateTime.GetVarDate WScript.Echo Next
Описание некоторых методов класса Win32_Directory:
Метод | Описание |
---|---|
Copy(string FileName) | Рекурсивно копирует каталог к местоположению, указанному во входном параметре (указывается полный путь к каталогу без завершающего слеша). Перезапись (overwriting) существующего каталога не поддерживается (если каталог назначения существует, никаких действий произведено не будет). |
Rename(string FileName) | Переименовывает папку. Во входном параметре указывается полный путь. Перезапись (overwriting) существующего каталога не поддерживается (если каталог назначения существует, никаких действий произведено не будет). |
Delete() | Удаляет папку. Папка НЕ попадает в корзину. |
Compress() | Сжимает папку. |
Uncompress() | Распаковывает папку. |
CopyEx(string FileName, string StopFileName, string StartFileName, boolean Recursive) | Копирует каталог. Перезапись (overwriting) существующего каталога не поддерживается (если каталог назначения
существует, никаких действий произведено не будет). Параметры:
|
DeleteEx(string StopFileName, string StartFileName) | Удаляет папку. Папка НЕ попадает в корзину. Параметры:
|
CompressEx(string StopFileName, string StartFileName, boolean Recursive) | Сжимает папку. Параметры:
|
UncompressEx(string StopFileName, string StartFileName, boolean Recursive) | Распаковывает папку. Параметры:
|
Следующий сценарий удаляет безвозвратно все папки с именем "NEW_STRU" на диске "D:".
On Error Resume Next Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2") If Err.Number <> 0 Then WScript.Echo Err.Number & ": " & Err.Description WScript.Quit End If Set colFolders = objService.ExecQuery("SELECT * FROM Win32_Directory WHERE " & _ "FileName = 'NEW_STRU' AND Drive = 'd:'") For Each objFolder In colFolders WScript.Echo objFolder.Name objFolder.Delete Next
Следующий сценарий копирует папку "c:\test" со всем содержимым, создавая папку "c:\test2":
On Error Resume Next Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2") If Err.Number <> 0 Then WScript.Echo Err.Number & ": " & Err.Description WScript.Quit End If Set colFolders = objService.ExecQuery("SELECT * FROM Win32_Directory WHERE Name = 'c:\\test'") For Each objFolder In colFolders objFolder.Copy "c:\test2" Next
Класс CIM_DataFile представляет файл. Некоторые свойства класса:
Свойство | Описание |
---|---|
Caption Name Description |
Краткое описание объекта. Фактически - полный путь к файлу. |
FileSize | Размер файла в байтах. |
Path | Путь к каталогу, содержащему файл, завершённый наклонной чертой. Например, "\windows\system\". |
EightDotThreeFileName | Полный путь с DOS-совместимым именем файла. Например, для файла "c:\windows\microsoft.net\framework\v1.1.4322\vshelpmetadata.reg" это будет "c:\windows\microsoft.net\framework\v1.1.4322\vshelp~1.reg". |
Drive | Буква диска с двоеточием. |
FileName | Имя файла без расширения. |
Extension | Расширение имени файла. |
CreationDate | Дата и время создания файла. |
LastAccessed | Дата и время последнего доступа. |
Compressed | True, если файл сжат, и False в противном случае. |
Hidden | Булево значение, указывающее на атрибут "скрытый". |
System | Булево значение, указывающее на атрибут "системный". |
Writeable | Булево значение, указывающее на то, что файл может быть записан. |
Archive | True, если файл имеет атрибут "архивный", и False в противном случае. |
FileType | Описание типа файла (по данным реестра) исходя из его расширения. |
FSName | Тип файловой системы. Например, "NTFS". |
CSName | Имя компьютера. |
Следующий сценарий выводит список путей всех EXE-файлов из каталога "c:\windows\system32\" (подкаталоги не учитываются):
On Error Resume Next Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2") If Err.Number <> 0 Then WScript.Echo Err.Number & ": " & Err.Description WScript.Quit End If Set colFiles = objService.ExecQuery("SELECT * FROM CIM_DataFile WHERE " & _ "Drive = 'C:' AND Path = '\\windows\\system32\\' AND Extension = 'EXE'") For Each objFile In colFiles WScript.Echo objFile.Name Next WScript.Echo "Всего файлов: " & colFiles.Count
Следующий сценарий выводит список путей всех EXE-файлов из каталога "C:\Program Files\1Cv77\" и вложенных подкаталогов. Примечание: запросы к файловой системе с ключевым словом "LIKE" (подобные запросу в этом сценарии) могут выполняться в течение довольно продолжительного времени. Указание в операторе SELECT конкретных полей вместо использования "*" позволяет несколько уменьшить время исполнения запроса:
On Error Resume Next Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2") If Err.Number <> 0 Then WScript.Echo Err.Number & ": " & Err.Description WScript.Quit End If Set colFiles = objService.ExecQuery("SELECT Name FROM CIM_DataFile WHERE " & _ "Drive = 'C:' AND Path LIKE '\\Program Files\\1Cv77\\%' AND Extension = 'EXE'") For Each objFile In colFiles WScript.Echo objFile.Name Next WScript.Echo "Всего файлов: " & colFiles.Count
Описание некоторых методов класса CIM_DataFile:
Метод | Описание |
---|---|
Copy(string FileName) | Копирует файл к местоположению, указанному во входном параметре (указывается полный путь к файлу). Перезапись (overwriting) существующего файла не поддерживается (если файл назначения существует, никаких действий произведено не будет). Возвращает нуль в случае успеха или код ошибки. |
Rename(string FileName) | Переименовывает файл. Во входном параметре указывается полный путь. Перезапись (overwriting) существующего файла не поддерживается (если файл назначения существует, никаких действий произведено не будет). Возвращает нуль в случае успеха или код ошибки. |
Delete() | Удаляет файл. Файл НЕ попадает в корзину. Возвращает нуль в случае успеха или код ошибки. |
Следующий сценарий копирует файл "c:\boot.ini" на диск "d:":
On Error Resume Next Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2") If Err.Number <> 0 Then WScript.Echo Err.Number & ": " & Err.Description WScript.Quit End If Set colFiles = objService.ExecQuery("SELECT * FROM CIM_DataFile WHERE " & _ "Drive = 'c:' AND FileName = 'boot' AND Extension = 'ini'") For Each objFile In colFiles WScript.Echo objFile.Copy("d:\boot.ini") Next
Людоговский Александр
Перейти на главную страничку сайта (список статей, файлы для скачивания)
© 2007 http://www.script-coding.com При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.