Detectar un número de versión de DLL usando un script
Pregunta
Me gustaría escribir un script que pueda escanear recursivamente las DLL en un directorio y generar un informe de todos sus números de versión.
¿Cómo puedo detectar el número de versión de una DLL usando un script? Se prefieren las soluciones VBScript, a menos que haya una mejor manera.
Solución
Puede usar el FileSystemObject
objeto para acceder al sistema de archivos y su GetFileVersion
método para obtener la información de la versión del archivo.
Usted solicitó un ejemplo de VBScript, así que aquí está:
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
Uso:
> cscript //nologo script-file.vbs folder > out-file
por ejemplo:
> cscript //nologo dll-list.vbs C:\Dir > dll-list.txt
Salida de muestra:
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 ...
Otros consejos
EDITAR Creo que esta es la fuente a la que hice referencia
Este es el guión que uso, pido disculpas, pero no recuerdo de dónde. (Entonces, lector, si esto comenzó como su script, avance) Utiliza el FileSystemObject que puede obtener la versión directamente.
@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