3

我想编写一个脚本,可以递归地扫描目录中的 DLL 并生成所有版本号的报告。

如何使用脚本检测 DLL 的版本号?VBScript 解决方案是首选,除非有更好的方法。

4

2 回答 2

6

您可以使用该FileSystemObject对象访问文件系统及其GetFileVersion获取文件版本信息的方法。

您要求提供 VBScript 示例,因此您在此处:

Dim oFSO : Set oFSO = CreateObject("Scripting.FileSystemObject")
PrintDLLVersions oFSO.GetFolder(WScript.Arguments.Item(0))

Sub PrintDLLVersions(Folder)
  Dim oFile, oSubFolder

  ' Scan the DLLs in the Folder
  For Each oFile In Folder.Files
    If UCase(oFSO.GetExtensionName(oFile)) = "DLL" Then
      WScript.Echo oFile.Path & vbTab & oFSO.GetFileVersion(oFile)
    End If
  Next

  ' Scan the Folder's subfolders
  For Each oSubFolder In Folder.SubFolders
    PrintDLLVersions oSubFolder
  Next
End Sub

用法:

> cscript //nologo script-file.vbs 文件夹> out-file

例如:

> cscript //nologo dll-list.vbs C:\Dir > dll-list.txt

样本输出:

C:\Dir\foo.dll 1.0.0.1
C:\Dir\bar.dll 1.1.0.0
C:\Dir\SubDir\foobar.dll 4.2.0.0
...
于 2009-09-14T18:33:58.820 回答
2

编辑我认为是我引用的来源

这是我使用的脚本,我很抱歉,但我不记得从哪里来的。(所以,读者,如果这是作为你的脚本开始的,请继续前进)它使用可以直接获取版本的 FileSystemObject。

@echo off
setlocal
set vbs="%temp%\filever.vbs"
set file=%1

echo Set oFSO = CreateObject("Scripting.FileSystemObject") >%vbs%
echo WScript.Echo oFSO.GetFileVersion(WScript.Arguments.Item(0)) >>%vbs%

for /f "tokens=*" %%a in (
'cscript.exe //Nologo %vbs% %file%') do set filever=%%a

del %vbs%
echo Full file version of %file% is: %filever%

for /f "tokens=2 delims=. " %%a in ("%filever%") do set secondparam=%%a
set splevel=%secondparam:~0,1%
echo SP level is: %splevel%

endlocal
pause
于 2009-09-14T15:23:31.633 回答