Batch Findstr findet Wort nicht

Manaplayer

Cadet 4th Year
Registriert
Juni 2017
Beiträge
92
Hallöchen Leute,
Ich komm mal wieder nicht weiter.
Ich will in einer Textdatei, wo Registry-Schlüssel drin sind, gewisse Einträge verändern/umschreiben.
Mit der For-Schleife komme ich schon nicht weiter, weil der Befehl "findstr" das Wort gar nicht findet.
Ich habs als mit dem Teil des Schlüssels "HKEY_LOCAL_MACHINE" getestet.
Auch als einzelnes Wort "MACHINE" findet er das Wort nicht.
Falls ihr da mehr wisst und er findet das Wort/Schlüssel, wie macht man das mit dem Wortwechsel?
Danke schon mal im Vorraus :)
 
Klar, kenne ich. Nur um es etwas "bequemer" zu machen, macht mein System alle 30 Tage ein Update von meinen Geräteeinstellungen. Diese Dateien sollen dann durch das umschreiben für andere Zwecke kompatibel gemacht werden.
Eben so, daß die Dateien schon "fertig" auf der Platte liegen.
 
Geht es generell um Registry-Eintraege?

Weil der richtige Wert ist in diesem Fall "HKEY_LOCAL_MACHINE" und nicht HKLM, wenn Du *.REG hast.
Fertig auf der Platte habe ich ein paar Registry-Exporte, welche ich bei Bedarf einfach importiere. Das hier ist eine davon.

Windows Registry Editor Version 5.00

;for private usage

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender\MpEngine]
"MpEnablePus"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Personalization]
"NoLockScreen"=dword:00000001

[HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Windows Search]
"AllowCortana"=dword:00000000

[HKEY_CURRENT_USER\SOFTWARE\WOW6432Node\Policies\Microsoft\Windows\Windows Search]
"AllowCortana"=dword:00000000

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Search]
"BingSearchEnabled"=dword:00000000
"CortanaConsent"=dword:00000000

In die REg zurueck gehts mit Rechtsklick oder reg import.

BFF
 
Ja das weiß ich alles mit Reg-Dateien. Hatte nur ein bisschen rumgespielt und wollte ein bisschen für spätere Zeiten dazulernen. Dabei hatte ich versucht mit einem Script die "HKEY_LOCAL_MACHINE " zu "HKLM" in der selben Reg-Datei zu machen. Bei der For-Schleife passiert gar nichts, und wenn ich "findstr" verwende, findet er keine Wörter davon, auch wenn ich die .reg Datei zu .txt mache.
 
Dann ist Dein Kommando falsch. ;)

Abgesehen davon sind *.REG und *.TXT reine Text-Dateien. Ein Umbenennen/Speichern unter hin oder her aendert daran nix.
Und fuer den spaeteren Import aus einer Datei in die Registry laesst Du gefaelligst die Schreibweise so wie Windows das am liebsten haben moechte. :D

BFF
 
Das Ersetzen von Strings in Dateien via Batch funktioniert nur sehr bedingt und sehr umständlich, da die Datei (ohne 3rd Party Software) komplett neu geschrieben werden muss. Desweiteren werden die Kürzel HKLM usw. in .reg Dateien meines Wissen nach nicht akzeptiert. Zum Problem: Probier mal find, statt findstr.
 
Der Witz ist, das "HKLM" sehr wohl akzeptiert wird in *.REG wen Du mit "reg import datei.reg" versuchst die zu importieren. Die Konsolse eines englischen W10 meldet schlicht "The operation completed successfully", es kommt aber nix in der Registry an. Selbiges bei Import direkt per Registry-Editor.

BFF
 
Es war ja nur als ein Versuch gedacht um die Funktionsweise zu lernen.
Darum wollte ich es mit dem Schlüssel als Testwort lernen.
"findstr" ist doch für Wörter in Textdateien gedacht oder nicht?
Wenn ich For /f %a in ('findstr "MACHINE" "Z:\DATEN\a.reg"') do (...) >>b.reg
Eingebe, schreibt er auch nicht die Ausgabedatei.
So richtig ein Genie bin ich längst nicht bei dem ganzen Zeug, darum frage ich euch ja ob ihr eine Idee habt wie das genau laufen soll.
 
For /f %a in ('findstr "MACHINE" "Z:\DATEN\a.reg"') do echo %a
Sollte alle Zeilen von Z:\DATEN\a.reg ausgeben, in denen das Wort MACHINE vorkommt. Das kann dabei auch Teil eines Wortes sein. Wenn in der Datei Z:\DATEN\a.reg also das Wort MACHINE vorkommt, muss Dein Fehler in dem Code liegen den Du mit (...) verschweigst.
 
Ich sag ja, als Test zum lernen, sollten alle "HKEY_LOCAL_MACHINE " zu "HKLM" gemacht werden.
Weil ich dachte, der Fehler wäre, weil noch Sonderzeichen im Text drin sind, hatte ich es erst mit "MACHINE" versucht.
Als ich es nur mit "findstr" versucht hatte, das Wort zu finden, hatte ich schon gesehen, daß "findstr" das Wort gar nicht findet, also kommt aus der For-Schleife auch nichts.
Wie man ein Wort nach ") do echo %a (...?...)" ändert, weiß ich ja auch nicht, darum frage ich euch ja.
Was ich bisher gesehen hab bei Google, war was wie "alt:neu" (mit dem Doppelpunkt halt dazwischen)
 
Die For - Schleife, so wie ich sie gepostet habe, funktioniert definitiv.

Du kannst es auch ohne Schleife testen: type "Z:\DATEN\a.reg" | findstr "MACHINE"
Das gibt ebenfalls alle Zeilen aus, in denen das Wort MACHINE enthalten ist.
 
Hm ok.
Die For-Schleife sollte ja ein gefundenes Wort verändern.
Nur wie geht das dann, wenn er das Wort sogar gefunden hat?
Nur mit dem "set a=b" Durcheinander?
Ich mache momentan zuviel für meine "Leistungskraft" durcheinander an zwei Systemen.
 
Du liest die zu ändernde Datei zeilenweise ein und schreibst diese Zeilen in eine temporäre Datei. Wenn Du auf die zu ändernde Stelle triffst, schreibst Du an Stelle der originalen Zeile die Änderungen. Anschließend machst Du mit den restlichen Zeilen weiter. Wenn Du fertig bist, löscht Du die originale Datei und benennst die temporäre Datei um.

Aber da Du anscheinend keine Kenntnisse von Batch-Programmierung hast, empfehle ich Dir das ganze wenn möglich mit Powershell zu lösen. Da gibt es einen Replace-Befehl und das macht es viel einfacher.
 
per Batch:
Code:
@echo off
SETLOCAL enabledelayedexpansion

REM Pfad zur Quell-Datei
SET "quell_datei=registry_ALT.txt"

REM Pfad zur Ziel-Datei
SET "ziel_datei=registry_NEU.txt"

REM diese Zeichenfolge wird gesucht:
SET "suchen_nach=HKEY_LOCAL_MACHINE"

REM Funde werden ersetzt durch: 
SET "ersetzen_durch=HKLM"

REM Hinweis wenn suchen_nach nicht gesetzt wurde
IF NOT DEFINED suchen_nach (ECHO Fehler: Die Variable suchen_nach nicht definiert^^!&GOTO :eof)

REM Loeschen der Zieldatei, falls diese schon vorhanden ist
IF EXIST %ziel_datei% (DEL /f %ziel_datei% 1>NUL 2>NUL)

REM Quelldatei zeilenweise auslesen und in Variable "zeile" schreiben
FOR /f "delims=" %%i IN ('FINDSTR . "%quell_datei%"') DO (
SET zeile=%%i& CALL :ersetzen !zeile!
)
GOTO :weiter

:ersetzen
REM Inhalt von 'suchen_nach' suchen + "ersetzen_durch" durchführen
SET zeile=!zeile:%suchen_nach%=%ersetzen_durch%!

REM Inhalt der Variable "zeile" in die Ausgabedatei schreiben
IF [!zeile!] EQU [] (ECHO.>>%ziel_datei%) ELSE (ECHO !zeile!>>%ziel_datei%)
GOTO :eof
 
Cool, richtig ausführlich erklärt, danke :)
Ich bin nunmal nicht mehr so ganz auf dem Stand der Zeit und brauche für vieles mehr Zeit um es in meinem "Speicher" zu bekommen, da ich eine bekannte Gedächtnisschwäche hab. (Kein Scherz!)
Trotzdem möchte ich Dinge verstehen und anschließend verwenden.
Darum - Dankeschön für die gute Erklärung :)
 
Zurück
Oben