whitelion
Goto Top

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

Content-Key: 85950

Url: https://administrator.de/contentid/85950

Ausgedruckt am: 19.03.2024 um 02:03 Uhr

Mitglied: 54487
54487 20.04.2008 um 13:18:44 Uhr
Goto Top
findstr ist dein Freund. Hilfe in der Konsole mit findstr /?
Mitglied: WhiteLion
WhiteLion 20.04.2008 um 13:43:22 Uhr
Goto Top
findstr ist dein Freund. Hilfe in der
Konsole mit findstr /?


also ich habs getest und bin noch nciht wirklich weiter gekommen. obwohl die datei ausgelesen.reg im temp vorhanden ist, und er laut promt dort auch sucht, findet er sie nicht:

c:\test>findstr "Heureka" %temp%/ausgelesen.reg
FINDSTR: C:\DOKUME~1\ADMINI~1\LOKALE~1\ausgelesen.reg kann nicht geöffnet werden. (ist aber da!!!)

weiterhin stelle ich mir die frage wie ich eine ifschleife gestallte, wenn der wert da ist, dann exit, falls nicht, andere batch ausführen.
Mitglied: 54487
54487 20.04.2008 um 13:52:44 Uhr
Goto Top
Wenn du den Slash hinter %temp% in einen Backslash änderst und den Pfad in Gänsefüßchen setzt, funktioniert dein Beispiel vielleicht. face-wink

@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)
Mitglied: WhiteLion
WhiteLion 20.04.2008 um 14:23:44 Uhr
Goto Top
aha, ok ... jetzt bin ich fast zufrieden ... also wenn "eof" automatisch zum dateiende springen soll ohne dass weitere befehle ausgeführt werden, klappts bei mir nicht....
ich habe jetzt folgendes:

@echo off & setlocal
regedit /E %temp%/ausgelesen.reg "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run"
;reg export HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run %temp%/ausgelesen.reg
findstr /i "Heureka" "%temp%\ausgelesen.reg" && goto :eof
add.bat
del %temp%\add.bat
del %temp%\ausgelesen.reg
exit

add.bat wird in jedem fall ausgeführt, auch wenn heureka vorhanen ist.... das soll ja nicht so sein. am besten wäre auch wenn der teil anch add.bat (also das löschen der dateien) immer ausgeführt wird, auch wenns vorhanden ist
Mitglied: 54487
54487 20.04.2008 um 14:28:53 Uhr
Goto Top
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.
Mitglied: WhiteLion
WhiteLion 20.04.2008 um 14:33:09 Uhr
Goto Top
@echo off & setlocal
regedit /E %temp%\ausgelesen.reg "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run"
;reg export HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run %temp%\ausgelesen.reg
findstr /i "Heureka" "%temp%\ausgelesen.reg" && goto :eof
add.bat
del %temp%\add.bat
del %temp%\ausgelesen.reg
exit

so besser? oder gar keinen slash ???
Mitglied: 54487
54487 20.04.2008 um 14:37:40 Uhr
Goto Top
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
Mitglied: WhiteLion
WhiteLion 20.04.2008 um 15:02:12 Uhr
Goto Top
@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"
:weiter
:weiter2
add.bat
del %temp%\add.bat
del %temp%\autoloc.reg
del %temp%\autouser.reg
:ende
del %temp%\add.bat
del %temp%\autoloc.reg
del %temp%\autouser.reg
exit


ich habs noch etwas erweitert.... aber leider werden die dateien autoloc.reg und autouser.reg nicht gelöscht face-sad

außerdem wird die add.bat in jedem fall ausgeführt, auch wenn der eintrag schon vorhanen!

ist es sonst schon richtig ?

EDIT: wenn ich per commandline "del %temp%\autouser.reg" eingebe wirds gelöscht! warum also in meiner batch nicht ?
Mitglied: bastla
bastla 20.04.2008 um 16:20:46 Uhr
Goto Top
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:
@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
Mitglied: paulepank
paulepank 20.04.2008 um 17:52:01 Uhr
Goto Top
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.

reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Run /s | findstr /i "heureka"  
und dann den Errorlevel auswerten. Dann kann man sich zumindest die reg-Datei sparen.

cu paulepank
Mitglied: bastla
bastla 20.04.2008 um 18:05:18 Uhr
Goto Top
Hallo paulepank!

Danke für den Hinweis - die Verwendung von "regedit" war mir gar nicht aufgefallen ... face-sad

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