Как получить “версию продукта” файла в VBScript

У меня есть VBScript, который проверяет на существование файла в каталоге на удаленной машине. Я надеюсь получать "Версию продукта" для упомянутого файла (НЕ "Версия файла"), но я, может казаться, не выясняю, как сделать это в VBScript.

Я в настоящее время использую Scripting.FileSystemObject проверять на существование файла.

Спасибо.

9
задан JMax 21 December 2011 в 09:40
поделиться

3 ответа

Вы можете использовать Shell.Namespace , чтобы получить расширенные свойства файла, одним из которых является Версия продукта. Функция GetDetailsOf должна работать. Чтобы получить представление, вы можете протестировать следующий код:

Dim fillAttributes(300)

Set shell = CreateObject("Shell.Application")
Set folder = shell.Namespace("C:\Windows")

Set file = folder.ParseName("notepad.exe")

For i = 0 to 299
    Wscript.Echo i & vbtab & fillAttributes(i) _
        & ": " & folder.GetDetailsOf(file, i) 
Next

Одна вещь, о которой следует помнить:

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

  • Window XP - 39
  • Windows Vista - 252
  • Windows 7 - 268
  • Windows 2008 R2 SP1 - 271
  • Windows 2012 R2 - 285

Вам также может оказаться полезным следующий пост .

3
ответ дан 4 December 2019 в 14:26
поделиться

Я не думаю, что это можно сделать в vbScript. Я могу ошибаться.

Вот ссылка на сценарий powershell, который делает то, о чем вы спрашиваете.

текст ссылки

Вот как выглядит вывод для моего windows dir.

    PS Scripts:\> ls c:\windows\*.exe | .\get-fileversion.ps1

ProductVersion   FileVersion      FileName
--------------   -----------      --------
2.7.3.0          2.7.3.0          C:\windows\agrsmdel.exe
0
ответ дан 4 December 2019 в 14:26
поделиться

Я использую функцию, которая немного изменена по сравнению с предыдущим примером. Функция берет путь и имя файла и возвращает «версию продукта»

Function GetProductVersion (sFilePath, sProgram)
Dim FSO,objShell, objFolder, objFolderItem, i 
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FileExists(sFilePath & "\" & sProgram) Then
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(sFilePath)
    Set objFolderItem = objFolder.ParseName(sProgram)
    Dim arrHeaders(300)
    For i = 0 To 300
        arrHeaders(i) = objFolder.GetDetailsOf(objFolder.Items, i)
        'WScript.Echo i &"- " & arrHeaders(i) & ": " & objFolder.GetDetailsOf(objFolderItem, i)
        If lcase(arrHeaders(i))= "product version" Then
            GetProductVersion= objFolder.GetDetailsOf(objFolderItem, i)
            Exit For
        End If
    Next
End If
End Function

. Я обнаружил, что положение атрибутов иногда изменяется (не знаю почему) в XP и Vista, поэтому я ищу атрибут «версия продукта». и выйдите из цикла, как только он будет найден. Закомментированная строка покажет все атрибуты и значение, если они доступны

11
ответ дан 4 December 2019 в 14:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: