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, 3891 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst In Batchdatei Variablen befüllen - mit Werten aus einer TXT-Datei (6)

Frage von donnyS73lb zum Thema Batch & Shell ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Webentwicklung
gelöst HTML Output in eine txt Datei mit VisualBasicScript (2)

Frage von coca22COCA zum Thema Webentwicklung ...

Batch & Shell
Merkwürdige Zeilenformatierung in txt Datei (3)

Frage von miczar zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...