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

Batch Find abwechselnd in txt

Frage Entwicklung Batch & Shell

Mitglied: Milli2311

Milli2311 (Level 1) - Jetzt verbinden

03.11.2008, aktualisiert 17:31 Uhr, 5371 Aufrufe, 7 Kommentare

Hei Leute,

sagt mal... Ich möchte Werte die Werte der installierten Programme aus der Registry auslesen und dann den Programm-Namen und die Programm-Version jeweils untereinander in eine Text-Datei schreiben..

Mein Script sieht wie folgt aus:
____________________________________________________________________________________________
@echo off

rem Registry-Werte exportieren
regedit /E c:\test.txt "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\uninstall"

rem Displaynamen suchen und in Extra-Datei schreiben
rem Finde DisplayNamen in C:\Test.txt, ignoriere Groß- und Kleinschreibung und schreibe deine Funde in C:\Software.txt
find "displayname" /i c:\test.txt >> C:\software.txt

rem DisplayVersion suchen und in Extra-Datei schreiben
rem Finde DisplayVersion in C:\Test.txt, ignoriere Groß- und Kleinschreibung und schreibe deine Funde in C:\Software.txt
find "displayversion" /i c:\test.txt >> C:\software.txt

rem Die Datei mit den kompletten Werten löschen
rem del c:\test.txt

echo on
____________________________________________________________________________________________

Leider schreibt es mir hier zuerst alle Programme und dann darunter alle Versionen in C:\Software.txt, sodass ich nicht auf den ersten Blick herausfinden kann, welches Programm welche Version vorweist.

Ich möchte also in der Text-Datei abwechselnd:
Programm-Name
Programm-Version
Programm2-Name
Programm2-Version

usw...

Danke für eure Hilfe.

MfG

Milli
Mitglied: AndreasA
03.11.2008 um 12:50 Uhr
Hallo Milli2311,

Versuchs einfach mit ner FOR-Schleife und der Query-Option von der reg.exe

Also in etwa so:

01.
set log=C:\Software.txt 
02.
 
03.
echo. >%log% 
04.
For /f %%a in ('reg query hklm\software\microsoft\windows\currentversion\uninstall') do (call :process_query %%a) 
05.
 
06.
goto :eof 
07.
 
08.
:process_query 
09.
set KEY=%1 
10.
reg query %key% /v Displayname >>%log% 
11.
reg query %key% /v DisplayVersion >>%log% 
12.
goto :eof 
13.
 
Gruß AndreasA
Bitte warten ..
Mitglied: Biber
03.11.2008 um 12:54 Uhr
Moin Milli2311,

hmmm, Du wirst mit dieser Strategie nur einen kurzen Schein-Erfolg erzielen können.
Es kann kann zuverlässiges/vorhersagbares Ergebnis erzeugt werden, wenn Du zwei optionale Egenschaften eines Objektes in einer meterlangen Liste zuordnen willst.

Oder anders hergeleitet, Du könntest vom CMD-Prompt aus schnell zum "Schein-Ziel" kommen:
01.
>set regkey="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\uninstall" 
02.
>for /f "tokens=2,*" %i in ('reg query %regkey% /s^|findstr /i "Display"') do @echo %j 
03.
.... 
04.
Microsoft .NET Framework 1.1 German Language Pack 
05.
1.4.2 
06.
IBM 32-bit Runtime Environment for Java 2, v1.4.2 
07.
6.0 
08.
...
...aber:
  • "Displayname" und erst recht "DisplayVersion" sind möglicherweise vorgesehen, aber es gibt nun mal in einer Registry keine MUSS-Felder. Manchmal fehlt eins. Oder das andere.
  • Und wenn sie da sind.... dann ist aber die Reihenfolge des Erscheinens beliebig

Demnach bleibt Dir bei einer Find-Suchworte-in-ellenlanger-textdatei-so-wie-se-kommen-Strategie schon nach einem ersten proof-of-concept die Luft aus.

Anderes Werkzeug oder andere Strategie?

Grüße
Biber
Bitte warten ..
Mitglied: Milli2311
03.11.2008 um 12:59 Uhr
Hei Danke euch erst mal für eure Mühe.

Leider verstehe ich nicht halb so viel von Batch wie ich gern möchte..

Die Sache ist auch nicht dringend, bin durch Zufall drauf gestoßen und dachte, es wäre schön, endlich mal eine Übersicht über die hier installierten Programme zu bekommen... (Fast jeder hat irgendwelche "Sonder-Programme" installiert)

Hättet ihr vllt. eine Idee, wie ich das ganze sonst machen könnte?

Vielen Dank

MfG
Milli
Bitte warten ..
Mitglied: Biber
03.11.2008 um 13:51 Uhr
Moin Milli1311,

die Lösung von AndreasA ist in etwa die, zu der ich Dich ermuntern wollte - die hatte ich vorhin noch nicht gesehen, als ich meinen Kommentar abgeschickt hatte.
Ich würde noch nach den beiden "reg query"-Zeilen in der ":process_query" ein "echo ----->>%log%" ergänzen, um wirklich hinterher definitiv erkennen zu können, welche Namen/Version zusammengehören.

Ansonsten sollte Deine Anforderung damit gelöst sein.

Grüße
Biber
Bitte warten ..
Mitglied: Milli2311
03.11.2008 um 14:05 Uhr
Vielen Dank es funktioniert

Könnte mir einer von euch beiden eventuell noch erklären, was jetzt wozu gut war? Lach

Oder finde ich das in irgendeinem Anfänger-Tutorial?
ich mein "set log=C:\Software.txt" is klar.. um die Variable zu setzen.

aber wieso ist nach dem Echo ein . ?
echo. >%log%

und wie funktioniert das mit dem For... Ich hab heut 5 Seiten dazu durchgelesen, aber das nie kapiert Wie würde man das denn sinngemäß lesen?

"Für jedes Teil in dem Registry-Eintrag, führe die Schritte unter process query aus?"
For /f %%a in ('reg query hklm\software\microsoft\windows\currentversion\uninstall') do (call :process_query %%a)

goto :eof

:process_query

das %1 steht doch bloß für eine Variable, die man vergeben kann oder? Wozu gibt es denn immer die vielen %
set KEY=%1
reg query %key% /v Displayname >>%log%
reg query %key% /v DisplayVersion >>%log%
goto :eof


Ok sorry, falls es zu viele Anfängerfragen sind xD Aber was genau tut der Befehl nun

Danke sehr. Sagt mir Bescheid, wenn ich zu viel gefragt hab und lieber woanders nachlesen sollte

Vielen Dank im Voraus

MfG
Milli
Bitte warten ..
Mitglied: Biber
03.11.2008 um 17:22 Uhr
Moin Milli2311,

Vielen Dank es funktioniert
DAS ist doch schon mal ein Anfang....

Könnte mir einer von euch beiden eventuell noch erklären, was jetzt wozu gut war? Lach
Ich versuche es.
Oder finde ich das in irgendeinem Anfänger-Tutorial?
Ein paar Tutorials und ebenso einige wenige handverlesene Links findest Du
hier im Forum im Berech "Batch & Shell".

Und ein paar Hundert gestellte Batch-Fragen, die mittlerweile mehrheitlich einen kleinen grünen Haken rechts oben kleben haben.
Also: bevor Du einen "Crashkurs Shell-Skripting" bei irgendeiner PC-Blümchen-Zeitschrift mitmachst oder "Die 100 geheimsten TOP-Insider-Batches" der Computerbild-Redaktion.... schau Dich lieber hier um.
ich mein "set log=C:\Software.txt" is klar.. um die Variable zu setzen.

aber wieso ist nach dem Echo ein . ?
echo. >%log%
Das ist notwendig, wenn man/frau eine Leerzeile/einen Leerstring ECHOen will.
Ohne den Punkt gäbe es einen Syntaxerror.

und wie funktioniert das mit dem For... Ich hab heut 5 Seiten dazu durchgelesen, aber das nie kapiert
Wie würde man das denn sinngemäß lesen?
Mehrmals.

"Für jedes Teil in dem Registry-Eintrag, führe die Schritte unter process query aus?"
For /f %%a in ('reg query hklm\software\microsoft\windows\currentversion\uninstall') do (call :process_query %%a)

goto :eof
"Für jedes Teil" heißt auf neudeutsch (falls Du mal in der Disse Eindruck schinden willst) "für jedes Token".
Wobei "Token" wiederum ein Bestandteil einer Zeile ist.
--> Batch oder auch CMD.exe arbeitet immer ZEILENweise, nie ZEICHENweise.
Und die uns von den Redmondern unerwartet vor knapp 10 Jahren erst gewährte Möglichkeit, so eine ZEILE noch in kleinere Häppchen, in TOKEN zu zerlegen, genau das war der Punkt, an dem die meisten DOS-Programmierer gesagt haben: "Hey, diesen neumodischen Krams versteht ja kein Mensch mehr - ich schule um und werde lieber Anlageberater bei der Landesbank.."
So entstand wegen der zu schnellen M$-Token-Einführung im Jahr 1998 heute, 10 Jahre später eine der lustigsten Wirtschaftskrisen der Neuzeit.

das %1 steht doch bloß für eine Variable, die man vergeben kann oder?
Selig die, die vergeben.... denn auch Ihnen wird vergeben werden...
Wozu gibt es denn immer die vielen %
Damit die vielen, vielen kleinen Variablen auch von der Mama CMD.exe wiedergefunden werden können zwischen dem ganzen stilisierten Denglisch, das so in einer Batchzeile steht.
set KEY=%1
Weise der Variablen KEY der Wert des ersten Parameters zu, der hier in der (Unter)Funktion angekommen ist.
reg query %key% /v Displayname >>%log%
reg query %key% /v DisplayVersion >>%log%
Beim Definieren, bein SETzen der Variable war klar: Nach SET muss ein Variablenname kommen.
Hier in den Folgezeilen werden durch die %-Zeichen sozusagen der CMD.exe die "Zeilenbestandteile" gezeigt, die durch variable Inhalte ersetzt werden müssen, bevor die eigentliche Zeile ausgeführt wird.
goto :eof
Neudeutsch für "Nu' mach hinne! Werd ma' langsam fertich jezz!"

Ok sorry, falls es zu viele Anfängerfragen sind xD
Ach was.... verglichen mit dem Bahnvorstand sind wir doch alle Anfänger.

Danke sehr. Sagt mir Bescheid, wenn ich zu viel gefragt hab und lieber woanders nachlesen sollte
Das wiederum würde Dich ja beim Lesen unnötig ablenken, wenn 50000 UserInnen "Bescheid!" sagen.
Bleib lieber hier und frag weiter - dafür haben wir immer Zeit hier.
Vielen Dank im Voraus
Okay, speziell diese Phrase ist nicht so der Bringer in diesem Seitenarm des Forums.
Bitte einfach weglassen in Zukunft und statt dessen einfach rückmelden, ob die Antwort gepasst hat.

Grüße
Biber
Bitte warten ..
Mitglied: Milli2311
03.11.2008 um 17:31 Uhr
Hi Biber,

Danke sehr, du hast mir sehr geholfen.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Nummerierte dateien lücke finden .batch (2)

Frage von franky89 zum Thema Batch & Shell ...

Batch & Shell
CMD-Batch hilfe: Dateiname zu txt (2)

Frage von Syscore64 zum Thema Batch & Shell ...

Batch & Shell
gelöst Mittels Batch eine Uhrzeit aus einer .txt auslesen und verabeiten (4)

Frage von Beatzler zum Thema Batch & Shell ...

Neue Wissensbeiträge
Windows Server

Umstellung SHA 1 auf SHA 2 - Migration der CA von CSP auf KSP

Tipp von Badger zum Thema Windows Server ...

Windows 10

Quato DTP94 unter Windows 10 x64 installieren und verwenden

Anleitung von anteNope zum Thema Windows 10 ...

Windows 10

Win10 1703 und Nutzerkennwörter bei Ersteinrichtung - erstaunliche Erkenntnis

(15)

Erfahrungsbericht von DerWoWusste zum Thema Windows 10 ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
CNC Maschinen verlieren Netzwerkverbindung (kurioser Fehler) (22)

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

Webentwicklung
Aktuellen Mitarbeiter auf Homepage anzeigen (13)

Frage von alemanne21 zum Thema Webentwicklung ...

Festplatten, SSD, Raid
Raid-Controller (Areca) Datenverlust trotz R5 (11)

Frage von sebastian2608 zum Thema Festplatten, SSD, Raid ...

Windows Server
gelöst Parameter Übergabe Terminal Server (9)

Frage von ThomasKern zum Thema Windows Server ...