如何在VBScript中检索文件的"产品版本"

Aar*_*ton 9 vbscript

我有一个VBScript,用于检查远程计算机上目录中是否存在文件.我希望检索所述文件的" 产品版本 "(不是 " 文件版本 "),但我似乎无法弄清楚如何在VBScript中做到这一点.

我目前正在Scripting.FileSystemObject用来检查文件是否存在.

谢谢.

小智 11

我使用的函数稍微修改了上一个示例.该函数获取路径和文件名并返回"产品版本"

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
Run Code Online (Sandbox Code Playgroud)

我发现在XP和Vista中属性的位置偶尔会发生变化(不确定原因)所以我找到"产品版本"属性并在找到后退出循环.注释掉的行将显示所有属性和值(如果可用)

  • 您没有创建FSO的对象以在您的函数中使用它,您必须在函数的第2行之后添加"Set FSO = CreateObject("Scripting.FileSystemObject")" (2认同)

Gar*_*ett 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
Run Code Online (Sandbox Code Playgroud)

需要注意的一件事:

文件的扩展属性因 Windows 版本而异。因此,产品版本索引号会根据您使用的 Windows 版本而变化。您可以使用上面的代码来确定它们是什么。根据我的测试,我认为它们如下:

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

您可能还会发现以下帖子很有帮助。

  • 代码的第一行“Dim fillAttributes(300)”没有在脚本中添加任何内容。您必须将“ fillAttributes(i) ”替换为“folder.GetDetailsOf(folder.Items,i) ” (4认同)