Versionsnummer von OCX per batch auslesen und drucken
Hallo,
mmh - grade angemeldet und schon ne Frage (oder war das der Grund meiner Anmeldung?! ;))
Es geht um folgendes:
Ich kopiere und regestriere per batch ein paar ocx-Dateien per folgedem Ausdruck:
z.B.:
copy MSCAL.OCX c:\windows\system32\
regsvr32 c:\windows\system32\MSCAL.OCX
.
.
.
Ich möchte (nachdem alle ocx Dateien regestriert sind die im Batch festgelegt sind) die aktuelle Versionsnummer der regestrierten Batchdateien anzeigen lassen und ausdrucken zu Dokumentationszwecken.
Frage ist:
Wie lese ich die Versionsnummer der ocx Dateien per batch aus und zeige sie dem Benutzer an und lasse diese dann ausdrucken?
Vieleicht kann mir da jemand helfen?!
Wie gesagt: es geht NICHT um das Datum der Dateien sondern um die Version.
Hoffe mal auf Antwort.
Gruß aus dem schönen Niedersachsen ;)
mmh - grade angemeldet und schon ne Frage (oder war das der Grund meiner Anmeldung?! ;))
Es geht um folgendes:
Ich kopiere und regestriere per batch ein paar ocx-Dateien per folgedem Ausdruck:
z.B.:
copy MSCAL.OCX c:\windows\system32\
regsvr32 c:\windows\system32\MSCAL.OCX
.
.
.
Ich möchte (nachdem alle ocx Dateien regestriert sind die im Batch festgelegt sind) die aktuelle Versionsnummer der regestrierten Batchdateien anzeigen lassen und ausdrucken zu Dokumentationszwecken.
Frage ist:
Wie lese ich die Versionsnummer der ocx Dateien per batch aus und zeige sie dem Benutzer an und lasse diese dann ausdrucken?
Vieleicht kann mir da jemand helfen?!
Wie gesagt: es geht NICHT um das Datum der Dateien sondern um die Version.
Hoffe mal auf Antwort.
Gruß aus dem schönen Niedersachsen ;)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 55738
Url: https://administrator.de/forum/versionsnummer-von-ocx-per-batch-auslesen-und-drucken-55738.html
Ausgedruckt am: 23.12.2024 um 09:12 Uhr
6 Kommentare
Neuester Kommentar
Hallo NetMare1 und (ein etwas verspätetes) Willkommen im Forum!
Für das Auslesen könnte ich eine kombinierte Batch/VB-Script-Lösung anbieten:
Kurze Beschreibung: Das konkrete Auslesen erledigt eine temporäre VBS-Datei, die direkt im Batch erzeugt wird. An diese Script-Datei wird als Argument beim Aufruf die zu prüfende .ocx-Datei mit komplettem Pfad übergeben. Der Rückgabewert wird in der Variablen %Version% zur weiteren Verwendung gespeichert. Abschließend wird die Script-Datei gelöscht.
Die oben stehende Version ist (zum Testen) als "stand-alone"-Variante gedacht. Wenn mehrere Dateien überprüft werden sollen, könntest Du um die Zeilen "set Version=" bis "if defined ..." eine Schleife bauen, die jeweils den Dateinamen (aus einer ohnehin vorhandenen Liste?) liefert.
Dann würde es sich auch anbieten, die Ausgabe in eine Textdatei umzuleiten und diese dem Benutzer per Windows-Editor zur Ansicht bzw zum Ausdruck zur Verfügung zu stellen.
Grüße
bastla
Für das Auslesen könnte ich eine kombinierte Batch/VB-Script-Lösung anbieten:
@echo off & setlocal
set "Datei=c:\windows\system32\MSCAL.OCX"
set "GetV=%Temp%\GetV.vbs"
echo Set objWMIService=GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")>"%GetV%"
echo Set colFiles=objWMIService.ExecQuery ("SELECT * FROM CIM_Datafile WHERE Name='"^&Replace(WScript.Arguments(0),"\","\\")^&"'")>>"%GetV%"
echo For Each objFile in colFiles: WScript.Echo objFile.Version: Next>>"%GetV%"
set Version=
for /f %%i in ('cscript //nologo "%GetV%" "%Datei%"') do set "Version=%%i"
if defined Version echo %Datei% - Version %Version%
del "%GetV%"
Die oben stehende Version ist (zum Testen) als "stand-alone"-Variante gedacht. Wenn mehrere Dateien überprüft werden sollen, könntest Du um die Zeilen "set Version=" bis "if defined ..." eine Schleife bauen, die jeweils den Dateinamen (aus einer ohnehin vorhandenen Liste?) liefert.
Dann würde es sich auch anbieten, die Ausgabe in eine Textdatei umzuleiten und diese dem Benutzer per Windows-Editor zur Ansicht bzw zum Ausdruck zur Verfügung zu stellen.
Grüße
bastla
Hallo NetMare1!
Freut mich, wenn's hilft.
Eine Anpassung möchte ich noch vorschlagen:
sorgt dafür, dass die Versionsinfo nicht durch zB Leerstellen auseinandergerissen wird (so habe ich gerade eben beim Testen folgende Versionsnummer - einer anderen .ocx-Datei - vorgefunden: 1, 0, 0, 1).
Grüße
bastla
Freut mich, wenn's hilft.
Eine Anpassung möchte ich noch vorschlagen:
for /f "delims=" %%i in ('cscript //nologo "%GetV%" "%Datei%"') do set "Version=%%i"
Grüße
bastla
Der Vollständigkeit halber (auch ich würde bastla's Variante vorziehen):
Es gibt naturlich auch diverse Konsolen-Utilities, die diese Versionsnummer anzeigen koennen.
Ein paar waren im Lauf der Zeit in der M$-ResKits dabei und tragen Namen wie FileVer.exe, FVer.exe oder so ähnlich.
Die M$-FileVer.exe hätte unter Umständen noch den Charme, dass damit auch Massenverarbeitung (also rekursive Abarbeitung von Dateien und Unterverzeichnissen) machbar ist und das zweifelhafte "Zusatzfeature", dass eine (erlaubte) nicht-konforme Versionsnummer wie von bastla gepostet automatisch geradegezogen wird.
Beispiel (die Datei GetOCXVersion.bat ist bastla's Skript, nur mit Inputparameter %1):
"Zweifelhaft" also deshalb, weil man/frau offensichtlich SEHR aufpassen muss, wenn eine Versionsnummer ermittelt wird.
Je nach (M$-)Tool kann "1.3.0.3130" ODER "1, 3, 0, 3130" zurueckgegeben werden.
Gruss
Biber
Es gibt naturlich auch diverse Konsolen-Utilities, die diese Versionsnummer anzeigen koennen.
Ein paar waren im Lauf der Zeit in der M$-ResKits dabei und tragen Namen wie FileVer.exe, FVer.exe oder so ähnlich.
Die M$-FileVer.exe hätte unter Umständen noch den Charme, dass damit auch Massenverarbeitung (also rekursive Abarbeitung von Dateien und Unterverzeichnissen) machbar ist und das zweifelhafte "Zusatzfeature", dass eine (erlaubte) nicht-konforme Versionsnummer wie von bastla gepostet automatisch geradegezogen wird.
Beispiel (die Datei GetOCXVersion.bat ist bastla's Skript, nur mit Inputparameter %1):
>for %i in (c:\windows\system32\t*.ocx) do @f:\Administrator\GetOCXVersion.bat %i
c:\windows\system32\tabctl32.ocx - Version 6.00.9043
c:\windows\system32\tdc.ocx - Version 1, 3, 0, 3130
>FileVer -bad c:\windows\system32\t*.ocx
W32i DLL ENU 6.0.90.43 shp c:\windows\system32\tabctl32.ocx
W32i DLL ENU <b>1.3.0.3130</b> shp c:\windows\system32\tdc.ocx
"Zweifelhaft" also deshalb, weil man/frau offensichtlich SEHR aufpassen muss, wenn eine Versionsnummer ermittelt wird.
Je nach (M$-)Tool kann "1.3.0.3130" ODER "1, 3, 0, 3130" zurueckgegeben werden.
Gruss
Biber
wenn bastla schon solche Steilvorlagen liefert, dann sollen alle etwas davon haben...
In Aktion:
Frohe Ostern
Biber
::--- snipp GetFileVer.Bat -- von Biber modifizierter bastla-Schnipsel
@echo off & setlocal
If "%*"=="" (echo Syntax: %~n0 [Lw:\Pfad\] Dateiname ^(Wildcards erlaubt^) && goto :eof)
set "GetV=%Temp%\GetV.vbs"
echo Set objWMIService=GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")>"%GetV%"
echo Set colFiles=objWMIService.ExecQuery ("SELECT * FROM CIM_Datafile WHERE Name='"^&Replace(WScript.Arguments(0),"\","\\")^&"'")>>"%GetV%"
echo For Each objFile in colFiles: WScript.Echo Replace(Replace(objFile.Version,",",".")," ",""): Next>>"%GetV%"
For %%i in (%*) do call :getVers "%%i"
del "%GetV%" & goto :eof
:getvers
set "Version=" & for /f %%i in ('cscript //nologo "%GetV%" "%~1"') do set "Version=%%i"
if defined Version echo %~1 - Version %Version%
::---snapp GetFileVer.bat
In Aktion:
>f:\administrator\GetFileVer.bat %windir%\system32\t*.ocx %windir%\system32\cs*.exe
C:\WINDOWS\system32\tabctl32.ocx - Version 6.00.9043
C:\WINDOWS\system32\tdc.ocx - Version 1.3.0.3130
C:\WINDOWS\system32\cscript.exe - Version 5.6.0.8820
C:\WINDOWS\system32\csrss.exe - Version 5.1.2600.2180(xpsp_sp2_rtm.040803-2158)
Frohe Ostern
Biber