Batch die eine vorhande .reg nach einem eintrag durchsucht
hallo,
leider konnte ich trotz intensiver suche keine lösung für mein problem finden. was nciht zuletzt daran liegt, dass der for befehl für mich (trotz bemühungen) recht unverständlich ist. mein problem:
ich habe meine batch-routine so weit, das im %temp%-verzeichnis eine datei namens "ausgelesen.reg" geschrieben wird, in dieser befinden sich registrierungsschlüssel. ich möchte gerne, dass wenn der schlüssel mit dem namen "Heureka" vorhanden ist, meine batchdatei beendet wird. ist er allerdings nicht vorhanden, sollte eine weiter batchdatei namens "add.bat" die ebenfalls im %temp% liegt ausgeführt wird.
leider konnte ich nix passendes finden und bedanke mich jetzt schonmal für die bemühungen!
LG jens
leider konnte ich trotz intensiver suche keine lösung für mein problem finden. was nciht zuletzt daran liegt, dass der for befehl für mich (trotz bemühungen) recht unverständlich ist. mein problem:
ich habe meine batch-routine so weit, das im %temp%-verzeichnis eine datei namens "ausgelesen.reg" geschrieben wird, in dieser befinden sich registrierungsschlüssel. ich möchte gerne, dass wenn der schlüssel mit dem namen "Heureka" vorhanden ist, meine batchdatei beendet wird. ist er allerdings nicht vorhanden, sollte eine weiter batchdatei namens "add.bat" die ebenfalls im %temp% liegt ausgeführt wird.
leider konnte ich nix passendes finden und bedanke mich jetzt schonmal für die bemühungen!
LG jens
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 85950
Url: https://administrator.de/contentid/85950
Ausgedruckt am: 26.11.2024 um 12:11 Uhr
11 Kommentare
Neuester Kommentar
findstr ist dein Freund. Hilfe in der Konsole mit findstr /?
Wenn du den Slash hinter %temp% in einen Backslash änderst und den Pfad in Gänsefüßchen setzt, funktioniert dein Beispiel vielleicht.
Wenn "heureka" gefunden wurde, wird die Batchdatei beendet (:eof ist eine vordefinierte Sprungmarke für das Dateiende)
@echo off & setlocal
findstr /i "heureka" "%temp%\ausgelesen.reg" && goto :eof
echo heureka wurde nicht gefunden, hier geht es weiter
..
..
Wenn "heureka" gefunden wurde, wird die Batchdatei beendet (:eof ist eine vordefinierte Sprungmarke für das Dateiende)
Ich hatte was zum Slash bzw. Backslash geschrieben. In einer Pfadangabe hat der Slash "/" nichts zu suchen. Du hast die Datei wieder mit dem "/" erzeugen lassen.
Wenn du die Zeile mit dem ";" am Anfang noch rausschmeißt und die Pfade in "" setzt, wird es langsam.
findstr /i "Heureka" "%temp%\ausgelesen.reg" && goto :ende || goto :weiter
:weiter
rem hierher bei Nichtvorhandensein
..
..
:goto :eof
:ende
rem hierher wenn gefunden
Hallo WhiteLion!
Vorweg: Auch wenn's diesmal nicht an den fehlenden Anführungszeichen liegt, würde ich empfehlen, diese im Zweifelsfall trotzdem zu verwenden.
Der Aufruf der "add.bat" ohne vorangestelltes "call" übergibt die Steuerung an "add.bat" - der Rest des aktuellen Batches wird daher gar nicht ausgeführt.
Eine auf das Wesentliche reduzierte Fassung könnte so aussehen:
Grüße
bastla
P.S.: Falls Du Dich fragst, warum der Batch-Code bei nachdenker, im Gegensatz zu Deinem, so schön formatiert ist: Formatierungen in den Beiträgen
Vorweg: Auch wenn's diesmal nicht an den fehlenden Anführungszeichen liegt, würde ich empfehlen, diese im Zweifelsfall trotzdem zu verwenden.
Der Aufruf der "add.bat" ohne vorangestelltes "call" übergibt die Steuerung an "add.bat" - der Rest des aktuellen Batches wird daher gar nicht ausgeführt.
Eine auf das Wesentliche reduzierte Fassung könnte so aussehen:
@echo off & setlocal
regedit /E "%temp%\autoloc.reg" "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run"
regedit /E "%temp%\autouser.reg" "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run"
findstr /i "heureka" "%temp%\autoloc.reg" && goto :ende
findstr /i "Heureka" "%temp%\autouser.reg" && goto :ende
call add.bat
:ende
del "%temp%\add.bat"
del "%temp%\autoloc.reg"
del "%temp%\autouser.reg"
Grüße
bastla
P.S.: Falls Du Dich fragst, warum der Batch-Code bei nachdenker, im Gegensatz zu Deinem, so schön formatiert ist: Formatierungen in den Beiträgen
Hallo in die Runde,
trotz aller freundlichen Hinweise wird das Wort Heureka nicht gefunden werden.
Grund: regedit /e exportiert in das Unicode-Format.
Es muß deshalb der Schalter /a verwendet werden.
Besser wäre hier wahrscheinlich auch die Verwendung von reg.exe
zb.
und dann den Errorlevel auswerten. Dann kann man sich zumindest die reg-Datei sparen.
cu paulepank
trotz aller freundlichen Hinweise wird das Wort Heureka nicht gefunden werden.
Grund: regedit /e exportiert in das Unicode-Format.
Es muß deshalb der Schalter /a verwendet werden.
Besser wäre hier wahrscheinlich auch die Verwendung von reg.exe
zb.
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Run /s | findstr /i "heureka"
cu paulepank
Hallo paulepank!
Danke für den Hinweis - die Verwendung von "regedit" war mir gar nicht aufgefallen ...
Ein genereller Workaround für die Unicode-Problematik wäre hier (da ohnehin in eine Datei exportiert wird) relativ einfach einsetzbar - eine neuerliche Ausgabe der Datei erfolgt nämlich im ASCII-Format, daher ginge es auch so:
Grüße
bastla
Danke für den Hinweis - die Verwendung von "regedit" war mir gar nicht aufgefallen ...
Ein genereller Workaround für die Unicode-Problematik wäre hier (da ohnehin in eine Datei exportiert wird) relativ einfach einsetzbar - eine neuerliche Ausgabe der Datei erfolgt nämlich im ASCII-Format, daher ginge es auch so:
type "%temp%\autoloc.reg"|findstr /i "heureka" && goto :ende
Grüße
bastla