Batch Find abwechselnd in txt
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 100862
Url: https://administrator.de/contentid/100862
Ausgedruckt am: 05.11.2024 um 06:11 Uhr
7 Kommentare
Neuester Kommentar
Hallo Milli2311,
Versuchs einfach mit ner FOR-Schleife und der Query-Option von der reg.exe
Also in etwa so:
Gruß AndreasA
Versuchs einfach mit ner FOR-Schleife und der Query-Option von der reg.exe
Also in etwa so:
set log=C:\Software.txt
echo. >%log%
For /f %%a in ('reg query hklm\software\microsoft\windows\currentversion\uninstall') do (call :process_query %%a)
goto :eof
:process_query
set KEY=%1
reg query %key% /v Displayname >>%log%
reg query %key% /v DisplayVersion >>%log%
goto :eof
Gruß AndreasA
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:
...aber:
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
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:
>set regkey="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\uninstall"
>for /f "tokens=2,*" %i in ('reg query %regkey% /s^|findstr /i "Display"') do @echo %j
....
Microsoft .NET Framework 1.1 German Language Pack
1.4.2
IBM 32-bit Runtime Environment for Java 2, v1.4.2
6.0
...
- "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
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
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
Moin Milli2311,
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.
Ohne den Punkt gäbe es einen Syntaxerror.
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.
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.
Bleib lieber hier und frag weiter - dafür haben wir immer Zeit hier.
Bitte einfach weglassen in Zukunft und statt dessen einfach rückmelden, ob die Antwort gepasst hat.
Grüße
Biber
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 Duhier 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.echo. >%log%
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.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
"Für jedes Teil" heißt auf neudeutsch (falls Du mal in der Disse Eindruck schinden willst) "für jedes Token".For /f %%a in ('reg query hklm\software\microsoft\windows\currentversion\uninstall') do (call :process_query %%a)
goto :eof
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.reg query %key% /v DisplayVersion >>%log%
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