1

Тема: VBScript: чтение расширенных свойств файлов

Иногда в WSH-скрипте требуется получить несколько больше свойств файла, чем просто имя, атрибуты, дата создания и подобное. Например, требуется получить битрэйт и/или заголовок песни mp3-файла, разрешение в точках jpg-файла, автора и/или тему документа MS Office и т.д. Подобные свойства можно увидеть в проводнике в палитре свойств файла на вкладке "Сводка" (или просто вывести эти свойства в колонки списка файлов проводника). Оказывается, эти же свойства не проблема получить и программно в скриптах. Нижеприведённый скрипт демонстрирует получение таких свойств для абстрактного файла "D:\Temp\123.jpg":

Set objShellApp = CreateObject("Shell.Application")
Set objFolder = objShellApp.NameSpace("D:\Temp\")
Set objItem = objFolder.ParseName("123.jpg")
strResult = vbNullString
strResult = strResult & "Информация об объекте """ & objItem.Path & """:" & vbCrLf
For i=-1 To 40
    strResult = strResult & i & " - " & objFolder.GetDetailsOf(objItem, i) & vbCrLf
Next
MsgBox strResult, vbInformation

Номера различных свойств разных форматов файлов вы можете найти экспериментально, перебрав номера свойств в цикле до какого-нибудь достаточно большого значения (что и сделано в скрипте с помощью переменной "i").
Идею опубликовал smaharbA.

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

2 (изменено: wisgest, 2008-09-01 19:52:21)

Re: VBScript: чтение расширенных свойств файлов

Метод Folder.GetDetailsOf(), вызванный без первого аргумента или с первым аргументом не являющимся объектом FolderItem, возвращает не значение i-го свойства конкретного файла, а название этого свойства (для русских версий Windows — по-русски).

Const Title = "Выберите папку для исследования доступных свойств её элементов."
Const Min = 0, Max = 40 'диапазон проверяемых свойств
Const NoNewFolderButton = &H200, EditBox = &H10
Set Shell = CreateObject("Shell.Application")
Do
  Set Folder = Shell.BrowseForFolder(0, Title, NoNewFolderButton Or EditBox)
  If Folder Is Nothing Then Exit Do
  Result =_
    "Папка: " & Folder.Self.Path & vbNewLine &_
    "Тип: " & Folder.Self.Type & vbNewLine & vbNewLine
  For I = Min To Max
    Result = Result &_
      I & " - " & Folder.GetDetailsOf(, I) & vbNewLine
  Next
  WScript.Echo Result &_
    vbNewLine 'пропуск строки для запуска под CScript
Loop

Замечание к скрипту: если интересующая папка (например, zip-папка) отсутствует в дереве папок, то можно просто ввести путь к ней.