
17467
20.01.2007, aktualisiert am 03.02.2010
Eintrag aus div Datei auslesen und in eine weitere Datei schreiben
Hallo,
ich habe einen Ordner mit vielen Reg exporten und möchte jetzt 4 Werte auslesen und in eine weitere Datei schreiben.
Erste Zeile soll der Dateiname sein und dann die Werte usw ..
gruß ins WE
ich habe einen Ordner mit vielen Reg exporten und möchte jetzt 4 Werte auslesen und in eine weitere Datei schreiben.
Erste Zeile soll der Dateiname sein und dann die Werte usw ..
gruß ins WE
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 03.02.2010 um 20:10:06 Uhr
Verschoben von "Tools & Utilities" nach "Batch & Shell", auf "Erledigt" und "Geschlossen" gesetzt.
Content-ID: 49329
Url: https://administrator.de/forum/eintrag-aus-div-datei-auslesen-und-in-eine-weitere-datei-schreiben-49329.html
Ausgedruckt am: 17.05.2025 um 00:05 Uhr
16 Kommentare
Neuester Kommentar
Hi,
Ok...also so müsste es gehen!
Leider habe ich es nicht getestet. Sry...
Gruß
Dani
Ok...also so müsste es gehen!
@ECHO off
::Kompletter Pfad zu dem REG-Ordner
SET dir_src=C:\te tes\assa
::TXT-Datei, in der die Dateinamen gespeichert werden soll
SET file=asdf
FOR /f %%a IN ('dir /b "%dir_src%"') DO (
FOR /f "skip=3 delims=: tokens=2,3* " %%b IN ('type "%dir_src%\%%a"') DO (
IF "%%b" == "00000001" ECHO %%a >> "C:\test\%file%.txt"
)
)
Gruß
Dani
Hallo ranjid!
Basierend auf Dani's Ansatz hätte ich folgendes anzubieten
Für jeden Key, den Du abfragen möchtest, müsstest Du einen Block wie oben in den beiden Beispielen nach ":ProcessLine" erstellen. Die Formatierung des Ergebnisses mit ";" als Trennzeichen erlaubt zB den Import in Excel - so wird's etwas übersichtlicher.
Grüße
bastla
Basierend auf Dani's Ansatz hätte ich folgendes anzubieten
@echo off & setlocal
::Kompletter Pfad zu dem REG-Ordner
set dir_src=D:\Regtest
::TXT-Datei, in der die Dateinamen gespeichert werden soll
set file="D:\RegTest\RegCheck.txt"
if exist %file% del %file%
for %%a in ("%dir_src%\*.reg") do for /f "skip=3 delims=" %%b in ('type "%%a"') do call :ProcessLine "%%a" "%%b"
goto :eof
:ProcessLine
set key=enablesecuritysignature
set val=00000001
echo %2 | findstr /i /C:"%key%" && echo %2 | findstr /C:"%val%" && echo %~n1;%key% >> %file%
::
set key=NoInternetOpenWith
set val=00000001
echo %2 | findstr /i /C:"%key%" && echo %2 | findstr /C:"%val%" && echo %~n1;%key% >> %file%
::
...
...
...
Grüße
bastla
...ich weiß' nicht...das wäre mir zuviel Heckmeck für diese Aufgabe.
Ich würde vom CMD-Prompt aus abfeuern...
...dann hätte ich alle Rechner mit einem 0-Eintrag. Oder ich fasse in eine Ergebnisdatei nacheinander alle gesuchten Werte zusammen:
findstr /i "enablesecuritysignature" z:\meine100RegFiles\*.reg >>alleWerte.txt
findstr /i "SignatureIsUgly" z:\meine100RegFiles\*.reg >>alleWerte.txt
...
etc...
Natürlich könnte ich diese ganzen FindStr's noch in eine FOR -Anweisung packen, wenn es sich lohnt..
Gruß
Biber
Ich würde vom CMD-Prompt aus abfeuern...
findstr /i "enablesecuritysignature" z:\meine100RegFiles\*.reg|findStr "00000000"
test.reg:"enablesecuritysignature"=dword:00000000
...dann hätte ich alle Rechner mit einem 0-Eintrag. Oder ich fasse in eine Ergebnisdatei nacheinander alle gesuchten Werte zusammen:
findstr /i "enablesecuritysignature" z:\meine100RegFiles\*.reg >>alleWerte.txt
findstr /i "SignatureIsUgly" z:\meine100RegFiles\*.reg >>alleWerte.txt
...
etc...
Natürlich könnte ich diese ganzen FindStr's noch in eine FOR -Anweisung packen, wenn es sich lohnt..
Gruß
Biber
Nur um zu zeigen, dass es auch mit einem (formatierten) Einzeiler geht:
...liefert, wenn er über die Dateien in c:\Reglogs schrapelt, folgenden Beispiel-Output bei mir:
Wenn ich diese Info ohne das (erläuternde) %%x, also den Suchstring ausgeben will, kann ich das letzte %%x am Ende ja weglassen.
Und den ganzen Krempel in die neue Zeitstempel-Datei leiten ginge mit:
Denke, die "Massen"-Verarbeitung über FindStr-mit-Wildcards ist ein Vielfaches schneller als die Nachbildung per FOR-Anweisungen.
Und für mich ist der Einzeiler immer noch les- und wartbar. *gg
Grüße
Biber
::--- snipp RegsAuswert.bat
@for %%x in ("EnableSecuritysignature.=dword:00000001"^
"RequireSecuritySignature.=dword:00000001"^
"OpenInternetWith.=dword:00000001"^
"EnablePlainTextPassword.=dword:00000001") do @(
for /f %%i in ('findstr /im /R "%%x" c:\reglogs\*.*') do @echo %%~ni %%x
)
$cmd$RegsAuswert.bat
compi15 "EnableSecuritysignature.=dword:00000001"
compi18 "EnableSecuritysignature.=dword:00000001"
compi21 "EnableSecuritysignature.=dword:00000001"
compi30 "EnableSecuritysignature.=dword:00000001"
compi16 "RequireSecuritySignature.=dword:00000001"
compi20 "RequireSecuritySignature.=dword:00000001"
compi24 "RequireSecuritySignature.=dword:00000001"
compi28 "RequireSecuritySignature.=dword:00000001"
compi12 "OpenInternetWith.=dword:00000001"
compi17 "OpenInternetWith.=dword:00000001"
compi22 "OpenInternetWith.=dword:00000001"
compi27 "OpenInternetWith.=dword:00000001"
Wenn ich diese Info ohne das (erläuternde) %%x, also den Suchstring ausgeben will, kann ich das letzte %%x am Ende ja weglassen.
Und den ganzen Krempel in die neue Zeitstempel-Datei leiten ginge mit:
RegsAuswert >D:\RegTest\%date:~6,4%-%date:~3,2%-%date:~0,2%-RegCheck.txt"
Denke, die "Massen"-Verarbeitung über FindStr-mit-Wildcards ist ein Vielfaches schneller als die Nachbildung per FOR-Anweisungen.
Und für mich ist der Einzeiler immer noch les- und wartbar. *gg
Grüße
Biber
@Biber
Sehr schöne Lösung.
Hinsichtlich Wartbarkeit: An Stelle der direkten Angabe könnten die Suchstrings bei wachsendem Umfang ja auch aus einer Textdatei kommen (ohne den "One-Liner-Status" zu beeinträchtigen
).
Full ACK. Bei mir da oben war's ein typischer Fall von Betriebsblindheit: "findstr" verwende ich praktisch nur, um irgendwelche Ausgabelisten einzudampfen - die "eigentliche" Funktionalität ("Suchen von Dateien nach Inhalt") hatte ich schon ganz verdrängt.
Grüße
bastla
Sehr schöne Lösung.
Hinsichtlich Wartbarkeit: An Stelle der direkten Angabe könnten die Suchstrings bei wachsendem Umfang ja auch aus einer Textdatei kommen (ohne den "One-Liner-Status" zu beeinträchtigen
Denke, die "Massen"-Verarbeitung über FindStr-mit-Wildcards ist ein Vielfaches schneller als die Nachbildung per FOR-Anweisungen.
Full ACK. Bei mir da oben war's ein typischer Fall von Betriebsblindheit: "findstr" verwende ich praktisch nur, um irgendwelche Ausgabelisten einzudampfen - die "eigentliche" Funktionalität ("Suchen von Dateien nach Inhalt") hatte ich schon ganz verdrängt.
Grüße
bastla
Danke, bastla.
"Hinsichtlich Wartbarkeit": ein FULL ACK von mir zurück.
Wo ich doch sogar schon bei simplen Batch-Dateien immer lamentiere, doch bitte Daten und Code zu trennen...
Wenn der Schnipsel bei mir "produktiv" wäre, hätte er zwei Parameter:
(1) Name der Suchstring-Datei
(2) QuellDir/evtl. Wildcards der zu durchsuchende Dateien.
Also bestünde sinngemäß aus der Zeile:
wo bei Parameter %1 eine Datei "Suchwerte.txt" dieser Form wäre:
... wobei (hab ich vorhin vergessen zu erwähnen) das Anführungszeichen im Suchstring für den FindStr.exe-Aufruf durch einen "." ersetzt werden muss.
Ist ungetestet, weil... ich glaube nicht, dass ich mir dafür einen Batch schreiben würde...
Grüße
Biber
"Hinsichtlich Wartbarkeit": ein FULL ACK von mir zurück.
Wo ich doch sogar schon bei simplen Batch-Dateien immer lamentiere, doch bitte Daten und Code zu trennen...
Wenn der Schnipsel bei mir "produktiv" wäre, hätte er zwei Parameter:
(1) Name der Suchstring-Datei
(2) QuellDir/evtl. Wildcards der zu durchsuchende Dateien.
Also bestünde sinngemäß aus der Zeile:
::--- snipp RegsAuswert-mit-Param.bat
@for /f %%x in (%1) do @ for /f %%i in ('findstr /im /R "%%x" %2') do @echo %%~ni %%x
wo bei Parameter %1 eine Datei "Suchwerte.txt" dieser Form wäre:
::--- snipp Suchwerte.txt
EnableSecuritysignature.=dword:00000001
RequireSecuritySignature.=dword:00000001
OpenInternetWith.=dword:00000001
EnablePlainTextPassword.=dword:00000001
Ist ungetestet, weil... ich glaube nicht, dass ich mir dafür einen Batch schreiben würde...
Grüße
Biber
Moin ranjid,
nimm aus meinem vorletzten Kommentar den Schnipsel "Regsauswert.bat", Copy&Paste den in eine gleichnamige Datei und passe die Suchstrings und den Pfad "c:\Reglogs\*.*" an.
- Oder-
Lege Dir eine Textdatei "Suchwerte.txt" an wie im letzten Posting und kopiere die eine Zeile "RegsAuswert-mit.Param.bat" in eine *.bat-Datei.
im 2. Fall aufrufen mit "Regsauswert.bat D:\einPfad\Suchwerte.txt D:\einpfad\DerRegDateien\*.*".
Mehr Hexenwerk ist nicht dabei.
Gruß
Biber
nimm aus meinem vorletzten Kommentar den Schnipsel "Regsauswert.bat", Copy&Paste den in eine gleichnamige Datei und passe die Suchstrings und den Pfad "c:\Reglogs\*.*" an.
- Oder-
Lege Dir eine Textdatei "Suchwerte.txt" an wie im letzten Posting und kopiere die eine Zeile "RegsAuswert-mit.Param.bat" in eine *.bat-Datei.
im 2. Fall aufrufen mit "Regsauswert.bat D:\einPfad\Suchwerte.txt D:\einpfad\DerRegDateien\*.*".
Mehr Hexenwerk ist nicht dabei.
Gruß
Biber