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

Findstr zwei Variablen finden in txt datei

Frage Entwicklung Batch & Shell

Mitglied: zimbo2150

zimbo2150 (Level 1) - Jetzt verbinden

17.01.2012 um 15:55 Uhr, 3903 Aufrufe, 6 Kommentare

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
Mitglied: bastla
17.01.2012 um 16:09 Uhr
Hallo zimbo2150 und willkommen im Forum!

Um mehrere Suchbegriffe zu finden, kannst Du "findstr" (wie Du lt Threadtitel ohnehin schon erkannt haben dürftest ) verwenden - etwa:
01.
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
Bitte warten ..
Mitglied: zimbo2150
17.01.2012 um 16:21 Uhr
Zitat von bastla:
Hallo zimbo2150 und willkommen im Forum!
Danke
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 ) verwenden - etwa:
01.
for /f "tokens=2 delims==" %i ('findstr "DisplayName DisplayVersion" inst.txt') do  
02.
> @echo %i 
03.
> 
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
habe auch diese Version geteste
01.
for /f "tokens=2 delims==" %i ('findstr "DisplayName" inst.txt') do @echo %i 
Bitte warten ..
Mitglied: bastla
17.01.2012 um 19:21 Uhr
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
Bitte warten ..
Mitglied: zimbo2150
18.01.2012 um 10:12 Uhr
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"    
Bitte warten ..
Mitglied: icsat
18.01.2012 um 11:09 Uhr
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:
01.
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
Bitte warten ..
Mitglied: zimbo2150
18.01.2012 um 13:08 Uhr
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
Bitte warten ..
Ähnliche Inhalte
Heiß diskutierte Inhalte
Router & Routing
Tipps für Router (ca. 100 clients, VPN) (18)

Frage von oel-auge zum Thema Router & Routing ...

TK-Netze & Geräte
gelöst Convert von TAPI auf CAPI gesucht (13)

Frage von StefanKittel zum Thema TK-Netze & Geräte ...