Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Per Batch Produktversion auslesen

Frage Entwicklung Batch & Shell

Mitglied: tegwert

tegwert (Level 1) - Jetzt verbinden

08.05.2011, aktualisiert 17:59 Uhr, 8108 Aufrufe, 15 Kommentare, 1 Danke

Hallo zusammen!

Ich nutze folgendes Script von bastla aus einem Beitrag des Forums (http://www.administrator.de/index.php?content=55738&thread=true#jum ...) um die Dateiversion einer EXE-Datei auszulesen:

01.
@echo off & setlocal 
02.
set "Datei=c:\temp\firefox.exe" 
03.
set "GetV=%Temp%\GetV.vbs" 
04.
echo Set objWMIService=GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")>"%GetV%" 
05.
echo Set colFiles=objWMIService.ExecQuery ("SELECT * FROM CIM_Datafile WHERE Name='"^&Replace(WScript.Arguments(0),"\","\\")^&"'")>>"%GetV%" 
06.
echo For Each objFile in colFiles: WScript.Echo objFile.version: Next>>"%GetV%" 
07.
set Version= 
08.
for /f %%i in ('cscript //nologo "%GetV%" "%Datei%"') do set "Version=%%i" 
09.
if defined Version echo %Datei% - Version %Version% 
10.
del "%GetV%" 
11.
pause
Das Script funktioniert soweit auch ohne Probleme und gibt mir die Dateiversion "6.0.0.4144" aus. Soweit so gut.
Nun gibt es aber in den Dateieigenschaften dieser EXE-Datei noch eine "Produktversion":

ecac57ce9a08cac2f94cf98fffd9094c - Klicke auf das Bild, um es zu vergrößern

Wie muss ich das Script anpassen, damit nun diese "Produktversion" ausgelesen wird? Oder gibt es dafür noch eine andere Lösung?

Für Eure Hilfe bedanke ich mich bereits im voraus!

Gruß
tegwert
Mitglied: Biber
08.05.2011 um 18:51 Uhr
Moin tegwert,

vorbehaltlich einem möglichen Veto seitens bastla würde ich behaupten, dass du die "Produktversion" nicht über die oben verwendete Strategie ermitteln kannst.
Denn diese Infos bekommst du eher über das Shell.Application-Object und den Namespace des folders als über die File-Attribute.

Ein Schnellschuss wäre:
01.
'GetFileDetailInfos.vbs 
02.
' inspiriert von http://stackoverflow.com/questions/2976734/how-to-retrieve-a-files-product-version-in-vbscript 
03.
Dim objShell, objFolder, objFolderItem, i, j  
04.
 
05.
Set FSO=CreateObject("Scripting.FileSystemObject") 
06.
If Wscript.Arguments.Count > 0 then 
07.
  sFullFileName = Wscript.Arguments(0) 
08.
Else 
09.
    sFullFileName ="c:\temp\firefox.exe" 
10.
End if   
11.
If FSO.FileExists(sFullFileName) Then 
12.
    sFilePath= FSO.GetParentFolderName(sFullFileName) 
13.
    sProgram = FSO.GetFileName(sFullFileName) 
14.
    Set objShell = CreateObject("Shell.Application") 
15.
    Set objFolder = objShell.Namespace(sFilePath) 
16.
    Set objFolderItem = objFolder.ParseName(sProgram) 
17.
    Dim arrHeaders(300) 
18.
    For i = 0 To 300 
19.
        arrHeaders(i) = objFolder.GetDetailsOf(objFolder.Items, i) 
20.
      ' WScript.Echo i &"- " & arrHeaders(i) & ": " & objFolder.GetDetailsOf(objFolderItem, i) 
21.
        If lcase(arrHeaders(i))= "dateiversion" Then 
22.
            WScript.Echo arrHeaders(i) & ": " & objFolder.GetDetailsOf(objFolderItem, i) 
23.
            j=j+1 
24.
        End If 
25.
 
26.
        If lcase(arrHeaders(i))= "produktversion" Then 
27.
            WScript.Echo arrHeaders(i) & ": " & objFolder.GetDetailsOf(objFolderItem, i) 
28.
            j=j+1 
29.
        End if 
30.
        If (j = 2) then 
31.
          Exit For 
32.
        End If 
33.
    Next 
34.
End If
Ausgabe von meinem CMD-Prompt aus
>f:\schnipsel\getFileDetailInfos.vbs 
Dateiversion: 2.0.1.4120 
Produktversion: 4.0.1.0
Grüße
Biber
Bitte warten ..
Mitglied: bastla
08.05.2011 um 19:16 Uhr
@Biber
Keinerlei Einwand , aber als Hinweis: für XP wäre (lt dieser Auflistung) der Direktzugriff über Property 39 und für Vista über 252 264 (siehe nächster Kommentar) möglich; für W7 ergibt sich unter Verwendung des von Dir geposteten Scripts 268

Unter XP hatte ich jedenfalls mit der folgenden "Kurzform" (Übergabe des Dateipfades als Parameter) Erfolg:
01.
Set fso = CreateObject("Scripting.FileSystemObject") 
02.
Set objShell = CreateObject("Shell.Application") 
03.
strFilePath = WScript.Arguments(0) 
04.
Set objFolder = objShell.Namespace(fso.GetParentFolderName(strFilePath)) 
05.
strLookFor = LCase(fso.GetFileName(strFilePath)) 
06.
 
07.
For Each strFileName in objFolder.Items 
08.
    strName = objFolder.GetDetailsOf(strFileName, 0) 
09.
    If LCase(strName) = strLookFor Then WScript.Echo objFolder.GetDetailsOf(strFileName, 39) 
10.
Next
[Edit] Die Version für W7:
01.
Set fso = CreateObject("Scripting.FileSystemObject") 
02.
Set objShell = CreateObject("Shell.Application") 
03.
strFilePath = WScript.Arguments(0) 
04.
Set objFolder = objShell.Namespace(fso.GetParentFolderName(strFilePath)) 
05.
strLookFor = LCase(fso.GetBaseName(strFilePath)) 
06.
 
07.
For Each strFileName in objFolder.Items 
08.
    strName = objFolder.GetDetailsOf(strFileName, 0) 
09.
    If LCase(strName) = strLookFor Then WScript.Echo objFolder.GetDetailsOf(strFileName, 268) 
10.
Next
Ich musste neben der Änderung von 39 auf 268 auch (siehe Zeile 5) den Dateinamen ohne Extension (="BaseName") für die Suche verwenden [Edit2] ... aber nur, weil in den Explorer-Einstellungen die Anzeige der Dateitypen ausgeblendet war - ein Argument mehr für die verbesserten Versionen unten von rubberman und Biber [/Edit2] ...
[/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: Biber
08.05.2011, aktualisiert 01.08.2013
Moin bastla,

wir hatten ja schon irgendwann mal über die ganze (je nach Sichtweise) Weltoffenheit/Flexbilität/Beliebigkeit/Wackligkeit der Durchnummerierung dieser Extended File Attributes geplaudert.

Was immer die RedmonderInnen dazu getrieben haben mag - ich sach mal so:
eigentlich werden schon mal zwei Hubschrauber und ein paas Marines aus nichtigeren Anlässen losgeschickt.

Diese vermeintlich "festen" versionsabhängigen Detailattribute haben eine noch kürzere Halbwertszeit als FDP-Parteitagsbeschlüsse,

Unter meinem Vista-Notebook kommt heraus
Attribut #252- Zweikanalton

Die beiden abgefragten Attribute:
156- Dateiversion: 2.0.1.4120
264- Produktversion: 4.0.1.0

Soweit zum Thema Praktikanten und Leisten.

Einziger mildernder Umstand für die Mädels: Okay, WhoTF sollte auch jemals so ein überflüssiges Attribut auslesen wollen?
@tegwert: Wofür brauchst du denn sowas??

Grüße
Biber
Bitte warten ..
Mitglied: bastla
08.05.2011 um 19:48 Uhr
Hallo Biber!
eine noch kürzere Halbwertszeit als FDP-Parteitagsbeschlüsse
XP hält sich in dieser Hinsicht zumindest ganz gut; was den Rest angeht: schaun mer mal ...

Grüße
bastla
Bitte warten ..
Mitglied: rubberman
08.05.2011 um 19:57 Uhr
Hallo Zusammen.

Warum das Kind nicht beim Namen nennen: "productversion"

In einem Paralleluniversum habe ich dem TO vorhin folgenden Vorschlag unterbreitet:
01.
@echo off &setlocal 
02.
set "Datei=C:\Program Files\Mozilla Firefox\Firefox.exe" 
03.
04.
  echo Set objFSO = CreateObject^("Scripting.FileSystemObject"^) 
05.
  echo Set objShell = CreateObject^("Shell.Application"^) 
06.
  echo Set objFolder = objShell.NameSpace^(objFSO.GetParentFolderName^(WScript.Arguments^(0^)^)^) 
07.
  echo WScript.Echo objFolder.ParseName^(objFSO.GetFileName^(WScript.Arguments^(0^)^)^).ExtendedProperty^("productversion"^) 
08.
)>"%temp%\getPV.vbs" 
09.
 
10.
for /f %%i in ('cscript //nologo "%temp%\getPV.vbs" "%Datei%"') do set "ProdVersion=%%i" 
11.
del "%temp%\getPV.vbs" 
12.
if defined ProdVersion echo %Datei% - ProduktVersion %ProdVersion% 
13.
 
14.
pause
Grüße
rubberman
Bitte warten ..
Mitglied: Biber
08.05.2011 um 20:00 Uhr
Moin bastla,

Zitat von bastla:
> eine noch kürzere Halbwertszeit als FDP-Parteitagsbeschlüsse
XP hält sich in dieser Hinsicht zumindest ganz gut; was den Rest angeht: schaun mer mal ...
Du kannst doch nicht die FDP mit einem bewährten und stabilen Erfolgsmodell wie XP vergleichen.
Ich schrieb doch " bei Vista..."

Grüße
Biber

[Edit] @rubberman
Okay, so ist es viel schlanker - aber wie kamst du jetzt von "FDP-Parteitagsbeschlüssen" auf "in einem Paralleluniversum"?
Ketzer

Meine jetzt eingedampfte V2-Version sieht mit Abfrage von"Productversion" und "Fileversion" dann fast wie deine aus:
01.
'GetFileDetailInfosV2.vbs 
02.
Set FSO=CreateObject("Scripting.FileSystemObject") 
03.
If Wscript.Arguments.Count > 0 then 
04.
    sFullFileName = Wscript.Arguments(0) 
05.
Else 
06.
    sFullFileName ="C:\Program Files\Mozilla Firefox\firefox.exe" 
07.
End if   
08.
If FSO.FileExists(sFullFileName) Then 
09.
    Set objFolder = CreateObject("Shell.Application").Namespace(FSO.GetParentFolderName(sFullFileName)) 
10.
    Set objFolderItem = objFolder.ParseName(FSO.GetFileName(sFullFileName)) 
11.
    WScript.Echo "Datei Version  : " & objFolderItem.ExtendedProperty("Fileversion") 
12.
    WScript.Echo "Produkt Version: " & objFolderItem.ExtendedProperty("productversion") 
13.
End If
Ausgabe
>f:\schnipsel\getFileDetailInfosV2.vbs 
Datei Version  : 2.0.1.4120 
Produkt Version: 4.0.1.0
[/Edit]
Bitte warten ..
Mitglied: tegwert
08.05.2011 um 20:26 Uhr
Hallo zusammen!

Vielen Dank an alle für die schnellen Lösungsvorschläge!

Gruß
tegwert
Bitte warten ..
Mitglied: bastla
08.05.2011 um 21:38 Uhr
Hallo rubberman!

Sehr schöne Lösung

- nur wäre mir die verringerte Lesbarkeit durch das "Escapen" der Klammern ein zu hoher Preis für das "Auf einen Rutsch in die Datei schreiben"-Feature (ist aber natürlich sehr subjektiv) ...

Grüße
bastla
Bitte warten ..
Mitglied: ovu-p86
10.05.2011 um 03:31 Uhr
Hallo Biber, Hallo Rubberman,

sowas hab ich schon lange gesucht.
Wie kann man das umbauen, daß die Programme aus eine .txt-Datei eingelesen werden.

Wofür ist das, Was soll erreicht werden:
Ein System auf die Aktualität der wichtigsten, grundlegenden Programme prüfen. Die gewünschten, zu überprüfenden Progamme stehen in einer "progr.txt".

progr.txt
01.
C:\Programme\Adobe\Reader 9.0\Reader\AcroRd32.exe 
02.
C:\Programme\Java\jre6\bin\java.exe 
03.
C:\WINDOWS\SYSTEM32\Macromed\Flash\FlashUtil10p_Plugin.exe 
04.
u.s.w.
Nun kann es natürlich sein, daß ein Programm auf einem System nicht vorhanden ist. Das müßte dann abgefangen werden damit das Ganze nicht abbricht.

Was ich an Bibers Lösung angenehm finde ist, das beides, Datei und Produkt-Version abgefragt werden.
(Oft gibts ja keinen Eintrag unter Produkt-Version, Datei-Version aber immer.)
Wäre schön wenn das Ergebnis dann in einer .txt-Datei landet.

Könnt ihr da noch mal weiterhelfen? Denke ist auch für viele andere interessant. Wäre dann richtig universell einsetzbar.

(Ums noch universeller zu machen, die "progr.txt" nicht so statisch zu lassen, würde ich dann versuchen nach den jeweiligen Programmen mit ggf. individuellen Programmpfaden oder Windows-Versionen zu suchen. Allerdings auf cmd-Basis, also vorgeschalteteten cmd der die "progr.txt" individuell erzeugt.)


Danke, Gruß
Uwe
Bitte warten ..
Mitglied: Biber
10.05.2011, aktualisiert 01.08.2013
Moin ovu-p86,

wenn ich von meiner "v2"-Version aus dem Vorkommentar ausgehe, sind nur banale Anpassungen nötig - eigentlich sollte nur zusätzlich des als "Parameter1" übergebenen Programms mit ausgegeben werden. Bedeutet eine zusätzliche Zeile Schreibaufwand.

01.
'GetFileDetailInfosV2fürMassenverarbeitung.vbs 
02.
Set FSO=CreateObject("Scripting.FileSystemObject") 
03.
If Wscript.Arguments.Count > 0 then 
04.
    sFullFileName = Wscript.Arguments(0) 
05.
Else 
06.
    sFullFileName ="C:\Program Files\Mozilla Firefox\firefox.exe" 
07.
End if   
08.
If FSO.FileExists(sFullFileName) Then 
09.
    Wscript.echo "[" & sFullFileName & "]" 
10.
    Set objFolder = CreateObject("Shell.Application").Namespace(FSO.GetParentFolderName(sFullFileName)) 
11.
    Set objFolderItem = objFolder.ParseName(FSO.GetFileName(sFullFileName)) 
12.
    WScript.Echo "Datei Version  : " & objFolderItem.ExtendedProperty("Fileversion") 
13.
    WScript.Echo "Produkt Version: " & objFolderItem.ExtendedProperty("productversion") 
14.
End If
[ungetestet - neu ist nur Zeile 09]

Der Aufruf mit der "alleGefragtenExeDateien.txt" kann dann ja in einer FOR/F-Anweisung erfolgen.
FOR /F %i "delims=" %i in ('X:\Doku\alleGefragtenExeDateien.txt') do X:\whereEver\GetFileDetailInfosV2fürMassenverarbeitung.vbs "%~i"
Grüße
Biber

[Edit 11.5. Tippfehler Zeile 09]
alt : Wscript.echo "[" & sFullFileName % "]"
neuer: Wscript.echo "[" & sFullFileName & "]"
[/Edit 11.5. Tippfehler Zeile 09]
Bitte warten ..
Mitglied: rubberman
10.05.2011 um 20:16 Uhr
Hallo ovu-p86, Moin Biber.

Als Stand-Alone-VBScript würde ich es so lösen:
01.
strSourceFile = "progr.txt" 
02.
strDestFile = "Versions.csv" 
03.
 
04.
Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject") 
05.
If Not objFSO.FileExists(strSourceFile) Then WScript.Quit 1 
06.
Dim objShell : Set objShell = CreateObject("Shell.Application") 
07.
 
08.
Set objSourceFile = objFSO.OpenTextFile(strSourceFile, 1) 
09.
Set objDestFile = objFSO.OpenTextFile(strDestFile, 2, True) 
10.
objDestFile.WriteLine("Programm;Dateiversion;Produktversion;Gefunden") 
11.
Do While Not objSourceFile.AtEndOfStream 
12.
  strLine = Trim(objSourceFile.ReadLine) 
13.
  arrVersions = GetFileDetailInfos(strLine) 
14.
  If VarType(arrVersions) = vbEmpty Then 
15.
    objDestFile.WriteLine(strLine & ";;;" & False) 
16.
  Else 
17.
    objDestFile.WriteLine(strLine & ";" & arrVersions(0) & ";" & arrVersions(1) & ";" & True) 
18.
  End If 
19.
Loop 
20.
objDestFile.Close 
21.
objSourceFile.Close 
22.
 
23.
Function GetFileDetailInfos(strFileFullName) 
24.
  Dim arrVer(1) 
25.
  If objFSO.FileExists(strFileFullName) Then 
26.
    Set objFolderItem = objShell.Namespace(objFSO.GetParentFolderName(strFileFullName)) _  
27.
      .ParseName(objFSO.GetFileName(strFileFullName)) 
28.
    arrVer(0) = objFolderItem.ExtendedProperty("FileVersion") 
29.
    arrVer(1) = objFolderItem.ExtendedProperty("ProductVersion") 
30.
    GetFileDetailInfos = arrVer 
31.
  End If 
32.
End Function
Grüße
rubberman
Bitte warten ..
Mitglied: ovu-p86
10.05.2011 um 22:28 Uhr
Hallo Biber, hallo rubberman,

Danke für die Lösungen.

Hatte heut nachmittag mal Bibers Lösung probiert. Hatte aber immer Fehlermeldungen. Habs versucht zu ändern, aber nicht hingekriegt. Wahrscheinlich wieder irgendein " , oder was weiß ich.

Eben habe ich Rubbermans Lösung probiert. Haut auf Anhieb hin. Auch nicht existierende Programme aus "progr.txt" werden abgefangen. Klasse. Danke.

Werde jetzt mal versuchen die "progr.txt" Erzeugung individueller zu gestalten.

Gruß
Uwe
Bitte warten ..
Mitglied: ovu-p86
11.05.2011 um 11:08 Uhr
Hallo,


hier jetzt der cmd um die "progr.txt" variabler zu handeln.
Falls man das Ganze mal auf einem anderen Rechner und Betriebssystem nutzt funktioniert das Ganze
immer noch. Die für das eigene System erstellte "progr.txt" dient dann als Anhaltspunkt.

Der cmd prüft ob die in progr.txt stehenden Programmpfade stimmen.
Wenn nicht wird eine Suche ausgelöst. Das Ganze wird dann in "progr_indiv.txt" geschrieben die anschließend
an den vbs übergeben. Der cmd selber ist Leerzeichenresistent.


Das Ganze ist natürlich nicht ideal, die Suche auf fremden Systemen dauert natürlich umso länger je weniger
Übereinstimmungen mit dem eigenen System bestehen. Aber es ist bei Bedarf eben universell.

Wie benutzen?
1. "progr.txt" mit der Liste der abzufragenden Programme erstellen.
2. "VersionFinder.cmd","rubberman.vbs" und "progr.txt" zusammen in ein beliebiges Verzeichnis kopieren.

Jetzt können durch Aufruf des "VersionFinder.cmd" die Datei- und Produktversion ermittelt werden.
Geht auch vom USB-Stick.


progr.txt (Beispiel)
01.
C:\Programme\Adobe\Reader 9.0\Reader\AcroRd32.exe 
02.
C:\Programme\Java\jre6\bin\java.exe 
03.
C:\WINDOWS\SYSTEM32\Macromed\Flash\FlashUtil10p_Plugin.exe 
04.
D:\Eigene Dateien\_versch\__progr\ThunderbirdPortable_\App\Thunderbird\thunderbird.exe 
05.
u.s.w.

VersonsFinder.cmd
01.
@echo off 
02.
rem ______________________________________________________________________________________________________ 
03.
rem . Datei und Produkt-Version ausgewaehlter Programme anzeigen 
04.
rem --------------------------------------------------------------------------------------------------- 
05.
rem . Diesen cmd, rubberman.vbs und progr.txt in ein beliebiges Verzeichnis kopieren und von dort aufrufen 
06.
rem . In der progr.txt die gewuenschten, abzufragenden Programme eintragen 
07.
rem ______________________________________________________________________________________________________ 
08.
 
09.
:setting 
10.
rem ++++++++ Hier bei Bedarf die max. abzusuchenden Lfw eingeben ++++++++++++ 
11.
set lfw=c d 
12.
 
13.
rem ++++++++ Name und Typ der Ausgabedatei, ggf. aendern ++++++++++++++++++++ 
14.
set ausgabe=VersionsInfo.txt 
15.
rem ______________________________________________________________________________________________________ 
16.
 
17.
:aktion 
18.
set cmdpfad=%~dp0 
19.
set "suche=%cmdpfad%progr.txt" 
20.
set source=progr_indiv.txt 
21.
if exist "%cmdpfad%%source%" del "%cmdpfad%%source%" 
22.
 
23.
FOR /F "usebackq delims=" %%a in ("%suche%") do if exist "%%a" (echo %%a >>"%cmdpfad%%source%") ELSE (for %%i in (%lfw%) do cd /d %%i:\ & dir "%%~nxa" /s /b >>"%cmdpfad%%source%") 
24.
 
25.
cd /d "%cmdpfad%" & "rubberman.vbs" "%source%" "%ausgabe%" 
26.
 
27.
:extra 
28.
if %ausgabe:~-3% EQU txt notepad "%cmdpfad%%ausgabe%"

rubberman.vbs
01.
' vbs made by rubberman 
02.
strSourceFile = WScript.Arguments(0) 
03.
strDestFile = WScript.Arguments(1) 
04.
 
05.
Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject") 
06.
If Not objFSO.FileExists(strSourceFile) Then WScript.Quit 1 
07.
Dim objShell : Set objShell = CreateObject("Shell.Application") 
08.
 
09.
Set objSourceFile = objFSO.OpenTextFile(strSourceFile, 1) 
10.
Set objDestFile = objFSO.OpenTextFile(strDestFile, 2, True) 
11.
objDestFile.WriteLine("Programm;Dateiversion;Produktversion;Gefunden") 
12.
Do While Not objSourceFile.AtEndOfStream 
13.
  strLine = Trim(objSourceFile.ReadLine) 
14.
  arrVersions = GetFileDetailInfos(strLine) 
15.
  If VarType(arrVersions) = vbEmpty Then 
16.
    objDestFile.WriteLine(strLine & ";;;" & False) 
17.
  Else 
18.
    objDestFile.WriteLine(strLine & ";" & arrVersions(0) & ";" & arrVersions(1) & ";" & True) 
19.
  End If 
20.
Loop 
21.
objDestFile.Close 
22.
objSourceFile.Close 
23.
 
24.
Function GetFileDetailInfos(strFileFullName) 
25.
  Dim arrVer(1) 
26.
  If objFSO.FileExists(strFileFullName) Then 
27.
    Set objFolderItem = objShell.Namespace(objFSO.GetParentFolderName(strFileFullName)) _  
28.
      .ParseName(objFSO.GetFileName(strFileFullName)) 
29.
    arrVer(0) = objFolderItem.ExtendedProperty("FileVersion") 
30.
    arrVer(1) = objFolderItem.ExtendedProperty("ProductVersion") 
31.
    GetFileDetailInfos = arrVer 
32.
  End If 
33.
End Function

An der Formatierung der Ausgabe könnte man natürlich noch was machen.
Vielleicht ist es doch besser das Ganze als .csv auszugeben und mit Excel o.ä. öffnen.
Aber kann man ja im cmd ändern statt VersionsInfo.txt eben .csv

Gruß
Uwe
Bitte warten ..
Mitglied: Biber
11.05.2011 um 20:05 Uhr
Moin ovu.p86,

Nachtrag.
Auch wenn es nicht mehr so interessant ist, weil du eine Lösung fertig hast - ich habe eben noch mal die neue Zeile09 in meinem letzten Kommentar angeschaut.
Da hatte ich irgendwo -so etwas ist selbst bei nur einer einzigen neuen Zeile möglich- einen albernen Tippfehler eingebaut.

Siehe oben.

Grüße
Biber
Bitte warten ..
Mitglied: mfritsch
13.07.2011 um 08:52 Uhr
Hallo,

kann mir vielleicht jemand helfen.

Das script funktioniert eigentlich ganz gut, aber warum wird bei mir unter XP immer Version "null" ausgegeben??
Unter Win7 gehts problemlos.

Was muss an dem Script angepasst werden, damit es bei beiden OS funktioniert?

Gruß
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Batch & Shell
gelöst Mit batch zeilen auslesen (2)

Frage von keksegriller zum Thema Batch & Shell ...

Batch & Shell
gelöst BATCH: Daten aus Textdatei auslesen und in neue Textdatei separieren (9)

Frage von Manuel1234 zum Thema Batch & Shell ...

Batch & Shell
Per Batch aktuell angemeldete User auslesen (1)

Frage von Peter32 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (18)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...