Top-Themen

Aktuelle Themen (A bis Z)

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, 8823 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 ..
Ähnliche Inhalte
Batch & Shell
Mit batch zeilen auslesen
gelöst Frage von keksegrillerBatch & Shell2 Kommentare

Hallihallo, ich fange gerade an mit batch-Dateien zu arbeiten und komme trotz stundenlangem ausprobieren und googlen leider nicht mehr ...

Batch & Shell
Batch: Textdatei Zeilenweise auslesen
gelöst Frage von CreatorXBatch & Shell2 Kommentare

Hallo, ich weiß, zu dem Thema gibt es schon unzählige Threads. Ich hab auch einiges dazu gefunden und trotzdem ...

Batch & Shell
Per Batch Client auslesen
gelöst Frage von 103148Batch & Shell14 Kommentare

Hallo, ich möchte gerne paar Infos von unseren Clients auslesen. Dazu würde ich folgenden Befehl im Anmelde Script nutzen: ...

Batch & Shell
Batch mit for txt auslesen?
gelöst Frage von Mohji32Batch & Shell4 Kommentare

Hallo, ich habe mir den "Grundkurs" zu for schleifen im Board angeschaut aber leider nicht das hin bekommen was ...

Neue Wissensbeiträge
Perl

Perl hat heute Geburtstag: 30 Jahre Perl: Lange Gesichter zum Geburtstag

Information von Penny.Cilin vor 7 StundenPerl2 Kommentare

Hallo, auch wenn es wenige wissen und noch weniger Leute es nutzen. Perl hat heute Geburtstag. 30 Jahre Perl ...

Sicherheit

Blackberry stirbt - Keine Updates für Priv mehr

Tipp von certifiedit.net vor 8 StundenSicherheit1 Kommentar

Blackberry wird zu einer 08/15 Firma und geht wohl mehr und mehr den Weg, den HTC schon ging. Von ...

Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 2 TagenWindows 1011 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 2 TagenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Heiß diskutierte Inhalte
Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
gelöst Frage von HelloWorldBatch & Shell22 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

Netzwerkgrundlagen
Belibiges Teilnetz einer Subnetzmaske rausfinden?
gelöst Frage von CenuzeNetzwerkgrundlagen18 Kommentare

Wundervollen Gutentag, mittlerweile kann ich Subnetting so einigermaßen, aber ein Problem habe ich noch. Netzwerkadresse und Boradcast errechnen ist ...

LAN, WAN, Wireless
WLAN Reichweite erhöhen mit neuer Antenne
gelöst Frage von gdconsultLAN, WAN, Wireless12 Kommentare

Hallo, ich besitze einen TL-WN722N USB-WLAN Dongle mit einer richtigen Antenne. Ich frage mich jetzt ob man die Reichweite ...

Windows Server
Logging von "gesendeten Nachrichten" auf Terminalservern
gelöst Frage von Z3R0C0MM4N0THiN6Windows Server10 Kommentare

Hallo zusammen, kann mir jemand auf kurzem Wege sagen ob 1) die per Task-Manager (oder damals tsadmin) an Benutzer ...