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
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.
GELÖST

Eintrag aus div Datei auslesen und in eine weitere Datei schreiben

Frage Entwicklung Batch & Shell

Mitglied: 17467

17467 (Level 1)

20.01.2007, aktualisiert 03.02.2010, 5278 Aufrufe, 16 Kommentare

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
Mitglied: Dani
20.01.2007 um 12:19 Uhr
Hi,
wäre vielleicht gut, wenn du mal dein Vorhaben genauer erklärst.

4 Werte auslesen und in eine weitere Datei schreiben.
Sprich an Han des Schlüsselnamens? Ja - Und was machst du 2 oder 3 Schlüssel den gleichen Namen haben?! Nein - Wie möchtest du dann abfragen??


Gruß
Dani
Bitte warten ..
Mitglied: 17467
20.01.2007 um 12:44 Uhr
okay ...

ich habe einen Ordner mit Regestry Exporten.

z.b. c:\reglog dort gibt es 100 Dateien mit %computername%.reg

in dieser Datei steht ein Eintrag z.b

"enablesecuritysignature"=dword:00000000

diesen Wert und 3 andere möchte ich überprüfen ob am Ende eine 1 oder eine Null steht, wenn eine 1 steht, möchte ich den Namen der Datei in eine andere schreiben bzw ergänzen.

Somit kann ich überprfüfen, wo der falsche Eintrag an welchem Computer eingetragen ist.

Wir haben zwar AD, aber ich kann es nicht pflegen, habe aber Adminrechte ...

Das ganze kommt in die Start Batch vom DomainController.
Und bei jedem Start des PCs wird mir der Eintrag aktuell ausgelesen.

gruß
Bitte warten ..
Mitglied: Dani
20.01.2007 um 13:00 Uhr
Hi,
Ok...also so müsste es gehen!

01.
@ECHO off 
02.
::Kompletter Pfad zu dem REG-Ordner 
03.
SET dir_src=C:\te tes\assa      
04.
 
05.
::TXT-Datei, in der die Dateinamen gespeichert werden soll 
06.
SET file=asdf 
07.
 
08.
FOR /f %%a IN ('dir /b "%dir_src%"') DO ( 
09.
     FOR /f "skip=3 delims=: tokens=2,3* " %%b IN ('type "%dir_src%\%%a"') DO ( 
10.
          IF "%%b" == "00000001" ECHO %%a >> "C:\test\%file%.txt" 
11.
12.
)
Leider habe ich es nicht getestet. Sry...


Gruß
Dani
Bitte warten ..
Mitglied: bastla
20.01.2007 um 13:38 Uhr
Hallo ranjid!

Basierend auf Dani's Ansatz hätte ich folgendes anzubieten

01.
@echo off & setlocal 
02.
::Kompletter Pfad zu dem REG-Ordner 
03.
set dir_src=D:\Regtest 
04.
 
05.
::TXT-Datei, in der die Dateinamen gespeichert werden soll 
06.
set file="D:\RegTest\RegCheck.txt" 
07.
if exist %file% del %file% 
08.
 
09.
for %%a in ("%dir_src%\*.reg") do for /f "skip=3 delims=" %%b in ('type "%%a"') do call :ProcessLine "%%a" "%%b" 
10.
goto :eof 
11.
:ProcessLine 
12.
set key=enablesecuritysignature 
13.
set val=00000001 
14.
echo %2 | findstr /i /C:"%key%" && echo %2 | findstr /C:"%val%" && echo %~n1;%key% >> %file% 
15.
:: 
16.
set key=NoInternetOpenWith 
17.
set val=00000001 
18.
echo %2 | findstr /i /C:"%key%" && echo %2 | findstr /C:"%val%" && echo %~n1;%key% >> %file% 
19.
:: 
20.
... 
21.
... 
22.
...
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
Bitte warten ..
Mitglied: Biber
20.01.2007 um 14:10 Uhr
...ich weiß' nicht...das wäre mir zuviel Heckmeck für diese Aufgabe.

Ich würde vom CMD-Prompt aus abfeuern...
01.
findstr /i "enablesecuritysignature" z:\meine100RegFiles\*.reg|findStr "00000000"  
02.
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
Bitte warten ..
Mitglied: 17467
20.01.2007 um 19:02 Uhr
Hallo Biber,

ich habe also die 100 Files und möchte in jeder Datei gucken, ob in dem 00000000 String eine 1 gesetzt ist, wenn dann möchte ich den Namen der Datei ( des Computer, der steht ja als Dateinamen ) in eine weitere Datei, dort gucke ich rein und überprüfe damit, ob es ein System gibt welches einen verkehtren Eintrag hat.
Bitte warten ..
Mitglied: 17467
20.01.2007 um 19:28 Uhr
Hallo Bastla,

hab mal den del rausgenommen, schreibt aber nichts .... es passiert zwar was, kommt aber keine text Datei ...

großes EDIT ...

meine Test haben alle den passenden Wert gehabt, also muss ich den Wert mal ändern und es klappt !!!

super !!!

Jetzt kann das Anmeldescript den Reg-Eintrag exportieren und ich gucke einmal am Tag drüber, ob ein Wert nicht richtig ist.

Zusätzlich ist es eine Kontrolle, da dieser Wert aus mit noch unbekannten Gründen geändert wird. Und ich kan jetzt genau den Tag sehen wann diese Wert wieder anderes ist.
Bitte warten ..
Mitglied: 17467
20.01.2007 um 19:45 Uhr
kleines edit

die Datei in der die Ergebnisse stehen soll noch mit im Dateinamen das Datum stehen, geht das ?
Bitte warten ..
Mitglied: bastla
20.01.2007 um 21:22 Uhr
Hallo ranjid!

Ändere die "set file="-Zeile auf
01.
set file="D:\RegTest\<b>%date:~6,4%-%date:~3,2%-%date:~0,2%-</b>RegCheck.txt"
Grüße
bastla
Bitte warten ..
Mitglied: 17467
20.01.2007 um 22:46 Uhr
sieht auch gut aus, weil das Datum auch richtig angezeigt wird !!!
Bitte warten ..
Mitglied: Biber
21.01.2007 um 12:54 Uhr
Nur um zu zeigen, dass es auch mit einem (formatierten) Einzeiler geht:

01.
::--- snipp RegsAuswert.bat 
02.
@for %%x in ("EnableSecuritysignature.=dword:00000001"^ 
03.
            "RequireSecuritySignature.=dword:00000001"^ 
04.
            "OpenInternetWith.=dword:00000001"^ 
05.
            "EnablePlainTextPassword.=dword:00000001") do @( 
06.
    for /f %%i in ('findstr /im /R "%%x" c:\reglogs\*.*') do @echo %%~ni %%x 
07.
    )
...liefert, wenn er über die Dateien in c:\Reglogs schrapelt, folgenden Beispiel-Output bei mir:
01.
$cmd$RegsAuswert.bat 
02.
 
03.
compi15 "EnableSecuritysignature.=dword:00000001" 
04.
compi18 "EnableSecuritysignature.=dword:00000001" 
05.
compi21 "EnableSecuritysignature.=dword:00000001" 
06.
compi30 "EnableSecuritysignature.=dword:00000001" 
07.
compi16 "RequireSecuritySignature.=dword:00000001" 
08.
compi20 "RequireSecuritySignature.=dword:00000001" 
09.
compi24 "RequireSecuritySignature.=dword:00000001" 
10.
compi28 "RequireSecuritySignature.=dword:00000001" 
11.
compi12 "OpenInternetWith.=dword:00000001" 
12.
compi17 "OpenInternetWith.=dword:00000001" 
13.
compi22 "OpenInternetWith.=dword:00000001" 
14.
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
Bitte warten ..
Mitglied: bastla
21.01.2007 um 17:38 Uhr
@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 ).

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
Bitte warten ..
Mitglied: Biber
21.01.2007 um 20:09 Uhr
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:
01.
::--- snipp RegsAuswert-mit-Param.bat 
02.
@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:
01.
::--- snipp Suchwerte.txt 
02.
EnableSecuritysignature.=dword:00000001 
03.
RequireSecuritySignature.=dword:00000001 
04.
OpenInternetWith.=dword:00000001 
05.
EnablePlainTextPassword.=dword:00000001
... 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
Bitte warten ..
Mitglied: 17467
21.01.2007 um 20:32 Uhr
ich will ja nicht stören .... ;>))

aber könnt ihr die Schnipsel mal zusammen fügen, damit ich das erkennen kann ...

thanks ....
Bitte warten ..
Mitglied: Biber
21.01.2007 um 20:48 Uhr
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
Bitte warten ..
Mitglied: bastla
21.01.2007 um 20:53 Uhr
... und vielleicht noch die Umleitung der Ausgabe dazu, also Aufruf (für die letzte Variante):
01.
Regsauswert.bat D:\einPfad\Suchwerte.txt D:\einpfad\DerRegDateien\*.*  > D:\nocheinPfad\%date:~6,4%-%date:~3,2%-%date:~0,2%-RegCheck.txt
Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
VB for Applications
gelöst PDF Datei auslesen und per VBA in Excel schreiben (3)

Frage von Julian8990 zum Thema VB for Applications ...

VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Batch & Shell
gelöst PowerShell, Log Datei auslesen, bei Änderungen E-Mail senden (12)

Frage von swissbull zum Thema Batch & Shell ...

Microsoft Office
Excel Dateien durchsuchen und Werte einzeln in neue Excel Datei auslesen (1)

Frage von krischanii zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...