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, 5315 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.

Mit freundlichen Grüßen

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

Mit freundlichen Grüßen
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

Mit freundlichen Grüßen
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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows 10
Batch: Copy file.txt Lokaler Drucker (1)

Frage von fluluk zum Thema Windows 10 ...

Batch & Shell
Altebekanntes Batch umlaute Problem (txt editor) (2)

Frage von Ritrivia zum Thema Batch & Shell ...

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

Frage von Markus5579 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 ...