zimbo2150
Goto Top

Findstr zwei Variablen finden in txt datei

hallo,

ich versuche aus einer text datei zwei häufig vorkommende Variablen zu finden.

und zwar habe ich mittels regedit mit den Key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
ausgelesen und dann als txt gespeicher sieht dann so aus:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Adobe AIR]
"DisplayIcon"="c:\\PROGRA~1\\COMMON~1\\ADOBEA~1\\Versions\\1.0\\RESOUR~1\\ADOBEA~1.EXE"
"DisplayName"="Adobe AIR"
"DisplayVersion"="2.7.1.19610"
"InstallLocation"="c:\\Program Files\\Common Files\\Adobe AIR\\"
"NoModify"=dword:00000001
"NoRepair"=dword:00000001
"Publisher"="Adobe Systems Incorporated"
"UninstallString"="c:\\Program Files\\Common Files\\Adobe AIR\\Versions\\1.0\\Resources\\Adobe AIR Updater.exe -arp:uninstall"
"VersionMajor"=dword:00000002
"VersionMinor"=dword:00000007

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Adobe Flash Player Plugin]
"DisplayName"="Adobe Flash Player 10 Plugin"
"Publisher"="Adobe Systems Incorporated"
"DisplayVersion"="10.3.183.5"
"HelpLink"="http://www.adobe.com/go/flashplayer_support/"
"NoModify"=dword:00000001
"NoRepair"=dword:00000001
"RequiresIESysFile"="4.70.0.1155"
"URLInfoAbout"="http://www.adobe.com"
"URLUpdateInfo"="http://www.adobe.com/go/getflashplayer/"
"VersionMajor"=dword:0000000a
"VersionMinor"=dword:00000003
"UninstallString"="C:\\Windows\\system32\\Macromed\\Flash\\FlashUtil10v_Plugin.exe -maintain plugin"
"DisplayIcon"="C:\\Windows\\system32\\Macromed\\Flash\\FlashUtil10v_Plugin.exe"
"EstimatedSize"=dword:00001800

ich brauche nun aus dieser Liste die Einträge DisplayName und DisplayVersion

was ich bis jetzt hinbekommen hab ist

for /f "tokens=2 delims==" %i ('type inst.txt^|find "DisplayName"') do 
@echo %i 

wie bekomme ich die Ausgabe so, dass ich immer ( sofern Vorhanden ) DisplayName und Display Version augegeben werden

Zum Hintergrund:
Ich schreiben grade an meiner BachelorThesis und soll die Softwareliste von Windows über Fernzugriff auslesen und dann in eine Datenbank schreiben

Danke für eure Hilfe

Content-Key: 179066

Url: https://administrator.de/contentid/179066

Printed on: April 19, 2024 at 13:04 o'clock

Member: bastla
bastla Jan 17, 2012 at 15:09:18 (UTC)
Goto Top
Hallo zimbo2150 und willkommen im Forum!

Um mehrere Suchbegriffe zu finden, kannst Du "findstr" (wie Du lt Threadtitel ohnehin schon erkannt haben dürftest face-wink) verwenden - etwa:
for /f "tokens=2 delims==" %i ('findstr "DisplayName DisplayVersion" inst.txt') do  @echo %i  
Wenn es umeine größere Anzahl vonSuchbegriffen oder solche mit Leerzeichen ginge, wäre die Alternative "/g:" mit einer Liste der Suchbegriffe in Dateiform zu verwenden ...

Grüße
bastla
Member: zimbo2150
zimbo2150 Jan 17, 2012 at 15:21:46 (UTC)
Goto Top
Zitat von @bastla:
Hallo zimbo2150 und willkommen im Forum!
Danke face-smile
und Danke für die schnelle Antwort

Zitat von @bastla:
Um mehrere Suchbegriffe zu finden, kannst Du "findstr" (wie Du lt Threadtitel ohnehin schon erkannt haben
dürftest face-wink) verwenden - etwa:
for /f "tokens=2 delims==" %i ('findstr "DisplayName DisplayVersion" inst.txt') do   
> @echo %i
> 
Wenn es umeine größere Anzahl vonSuchbegriffen oder solche mit Leerzeichen ginge, wäre die Alternative
"/g:" mit einer Liste der Suchbegriffe in Dateiform zu verwenden ...

Grüße
bastla

hab ich probiert aber ohne Ergebnis face-sad
habe auch diese Version geteste
for /f "tokens=2 delims==" %i ('findstr "DisplayName" inst.txt') do @echo %i   
Member: bastla
bastla Jan 17, 2012 at 18:21:48 (UTC)
Goto Top
Hallo zimbo2150!

Ändert sich das Ergebnis, wenn Du das fehlende "in" (hatte ich vorhin leider auch übersehen) ergänzt?
for /f "tokens=2 delims==" %i in ('findstr "DisplayName DisplayVersion" inst.txt') do @echo %~i
Grüße
bastla
Member: zimbo2150
zimbo2150 Jan 18, 2012 at 09:12:25 (UTC)
Goto Top
Zitat von @bastla:
Ändert sich das Ergebnis, wenn Du das fehlende "in" (hatte ich vorhin leider auch übersehen)
ergänzt?
for /f "tokens=2 delims==" %i in ('findstr "DisplayName DisplayVersion" inst.txt') do @echo %~i 


hi bei deiner Version kam immer die Frage "mehr?" in einer endlos Schleife.

hab jetzt diese Version zum laufen gebracht

 for /f "tokens=2 delims==" %i in ('type inst.txt^|findstr "DisplayName DisplayVersion"') do @echo %i 

Mein neues Problem ist nun, mir ist aufgefallen das in der Registry Ausgabe also der inst.txt die Anordnung von DisplayName und DisplayVersion manchmal vertauscht wird und manchmal fehlt.
wie kann ich denn die Auagabe pro Key machen also das er [HKEY_LOCAL_MACHINE\ sucht dann DisplayVersion und DisplayName

 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{FDB3B167-F4FA-461D-976F-286304A57B2A}]
"AuthorizedCDFPrefix"=""
"Comments"=""
"Contact"=""
"DisplayVersion"="2.7.1.19610"
"HelpLink"=""
"HelpTelephone"=""
"InstallDate"="20110924"
"InstallLocation"="c:\\Program Files\\Common Files\\Adobe AIR\\"
"InstallSource"="c:\\users\\j8910~1\\appdata\\local\\temp\\air73d7.tmp\\"
"ModifyPath"=hex(2):4d,00,73,00,69,00,45,00,78,00,65,00,63,00,2e,00,65,00,78,\
  00,65,00,20,00,2f,00,49,00,7b,00,46,00,44,00,42,00,33,00,42,00,31,00,36,00,\
  37,00,2d,00,46,00,34,00,46,00,41,00,2d,00,34,00,36,00,31,00,44,00,2d,00,39,\
  00,37,00,36,00,46,00,2d,00,32,00,38,00,36,00,33,00,30,00,34,00,41,00,35,00,\
  37,00,42,00,32,00,41,00,7d,00,00,00
"Publisher"="Adobe Systems Incorporated"
"Readme"=""
"Size"=""
"EstimatedSize"=dword:0000788b
"SystemComponent"=dword:00000001
"UninstallString"=hex(2):4d,00,73,00,69,00,45,00,78,00,65,00,63,00,2e,00,65,00,\
  78,00,65,00,20,00,2f,00,49,00,7b,00,46,00,44,00,42,00,33,00,42,00,31,00,36,\
  00,37,00,2d,00,46,00,34,00,46,00,41,00,2d,00,34,00,36,00,31,00,44,00,2d,00,\
  39,00,37,00,36,00,46,00,2d,00,32,00,38,00,36,00,33,00,30,00,34,00,41,00,35,\
  00,37,00,42,00,32,00,41,00,7d,00,00,00
"URLInfoAbout"=""
"URLUpdateInfo"=""
"VersionMajor"=dword:00000002
"VersionMinor"=dword:00000007
"WindowsInstaller"=dword:00000001
"Version"=dword:02070001
"Language"=dword:00000409
"DisplayName"="Adobe AIR"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}]
"AuthorizedCDFPrefix"=""
"Comments"=""
"Contact"=""
"DisplayVersion"="9.0.21022"
"HelpLink"=""
"HelpTelephone"=""
"InstallDate"="20110720"
"InstallLocation"=""
"InstallSource"="c:\\2d32e62a9c659edb17380f67802d\\"
"ModifyPath"=hex(2):4d,00,73,00,69,00,45,00,78,00,65,00,63,00,2e,00,65,00,78,\
  00,65,00,20,00,2f,00,58,00,7b,00,46,00,46,00,36,00,36,00,45,00,39,00,46,00,\
  36,00,2d,00,38,00,33,00,45,00,37,00,2d,00,33,00,41,00,33,00,45,00,2d,00,41,\
  00,46,00,31,00,34,00,2d,00,38,00,44,00,45,00,39,00,41,00,38,00,30,00,39,00,\
  41,00,36,00,41,00,34,00,7d,00,00,00
"NoModify"=dword:00000001
"NoRepair"=dword:00000001
"Publisher"="Microsoft Corporation"
"Readme"=""
"Size"=""
"EstimatedSize"=dword:000005a6
"UninstallString"=hex(2):4d,00,73,00,69,00,45,00,78,00,65,00,63,00,2e,00,65,00,\
  78,00,65,00,20,00,2f,00,58,00,7b,00,46,00,46,00,36,00,36,00,45,00,39,00,46,\
  00,36,00,2d,00,38,00,33,00,45,00,37,00,2d,00,33,00,41,00,33,00,45,00,2d,00,\
  41,00,46,00,31,00,34,00,2d,00,38,00,44,00,45,00,39,00,41,00,38,00,30,00,39,\
  00,41,00,36,00,41,00,34,00,7d,00,00,00
"URLInfoAbout"=""
"URLUpdateInfo"=""
"VersionMajor"=dword:00000009
"VersionMinor"=dword:00000000
"WindowsInstaller"=dword:00000001
"Version"=dword:0900521e
"Language"=dword:00000409
"DisplayName"="Microsoft Visual C++ 2008 Redistributable - x86 9.0.21022"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{D0795B21-0CDA-4a92-AB9E-6E92D8111E44}\25_escape]
"DisplayName"="SAMSUNG USB Driver for Mobile Phones"
"UninstallString"="C:\\Program Files\\Samsung\\USB Drivers\\25_escape\\Uninstall.exe"
"DisplayVersion"="2.9.201.1018"
"URLInfoAbout"="http://www.samsungmobile.com"
"Publisher"="SAMSUNG Electronics Co., Ltd."
"Version"="2.9.201.1018"    
Member: icsat
icsat Jan 18, 2012 at 10:09:01 (UTC)
Goto Top
Hallo zimbo2150,

Zitat von @zimbo2150:
wie kann ich denn die Auagabe pro Key machen
Die Ausgabe ist doch pro Key, da der "findstr" die Eingabedatei sequentiell abarbeitet.
So werden z.B. die trennenden "HKEY_LOCAL_MACHINE" mit ausgegeben:
for /f "tokens=1, 2 delims==\" %i in ('type inst.txt^|findstr "DisplayName DisplayVersion HKEY_LOCAL_MACHINE"') do @if "%i"=="[HKEY_LOCAL_MACHINE" (@echo %i) else (@echo %j)  

Ich würde bei deiner Problemstellung allerdings anders vorgehen und mich vom Einzeiler verabschieden. Kurz skizziert:
  • Variablen zum zwischenspeichern auf Dummywerte setzen
  • sequentielles lesen der Eingabedatei
  • zwischenspeichern der Namens- und Versionswerte in entsprechende Variablen
  • beim Gruppenwechsel (Zeile HKEY_LOCAL_MACHINE) Ausgabe der Daten in die Datenbank und Variablen zurück auf Dummy

Viel Spaß und viel Erfolg bei Deiner BachelorThesis. Was für ein Bachelor soll dabei denn rauskommen?


Gruß icsAT
Member: zimbo2150
zimbo2150 Jan 18, 2012 at 12:08:26 (UTC)
Goto Top
@icsat: @bastla:

Danke für eure Hilfe und vor allem so schnell. Setz den Beitrag als gelöst.

Es soll man der B.Sc. Kommunikationsinformatik rauskommen noch 6 Wochen dann ist Abgabe