Определение номера версии DLL с помощью скрипта - PullRequest
2 голосов
/ 14 сентября 2009

Я хотел бы написать скрипт, который может рекурсивно сканировать библиотеки DLL в каталоге и генерировать отчет обо всех номерах их версий.

Как я могу определить номер версии DLL, используя скрипт? Решения VBScript предпочтительны, если нет лучшего способа.

Ответы [ 2 ]

4 голосов
/ 14 сентября 2009

Вы можете использовать объект 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 <i>script-file.vbs</i> <i>folder</i> > <i>out-file</i>

например:.

> 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
...
2 голосов
/ 14 сентября 2009

РЕДАКТИРОВАТЬ Я думаю это источник, на который я ссылался

Это сценарий, который я использую, извиняюсь, но не помню откуда. (Итак, читатель, если это началось как ваш скрипт, пожалуйста, сделайте шаг вперед). Он использует 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
...