Top-Themen

Aktuelle Themen (A bis Z)

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

Frage Entwicklung Batch & Shell

GELÖST

per Batch neuste Datei öffnen und bestimmtes Muster auslesen

Mitglied: Simmon

Simmon (Level 1) - Jetzt verbinden

15.01.2008, aktualisiert 17:49 Uhr, 7757 Aufrufe, 7 Kommentare

Hallo zusammen,
meine Batch-Kenntnisse reichen leider für mein aktuelles Vorhaben nicht aus, daher hoffe ich, auf diesem Wege vielleicht ne Hilfestellung zu bekommen:

- In einem Ordner befinden sich mehrere log-Dateien mit dem Namensmuster 'XYZ_ZEITSTEMPEL.log' also z.B. 'XYZ_20080115_1024.log'
- In diesen Dateien befindet sich irgendwo ein bestimmtes Textsegment, welches ich gerne in eine neu anzulegende Datei verschieben würde. Den Beginn des Segmentes kann ich eindeutig identifizieren. Das Ende ebenfalls. Dazwischen befindet sich eine bestimmte Anzahl Zeilen (variabel), welche ich gerne in die andere Datei verschieben würde.

In Pseudocode ausgedrückt bräuchte ich also folgende Funktion

1. Identifiziere die neuste (anhand 'Date modified') aller Dateien im Verzeichnis, die mit 'XYZ' beginnen
2. Suche erstes Vorkommen von Muster 'ABC' in dieser Datei
3. Suche erstes Vorkommen von Muster 'DEF' nach dem ersten Vorkommen von 'ABC'
4. Kopiere die dazwischen liegenden Zeilen in neue Datei 'Neu.txt'


- Das Muster 'DEF' kommt sehr oft in der Datei vor, daher ist es im Punkt 3 wichtig, das erste Vorkommen von 'DEF' NACH 'XYZ' zu finden
- Das Identifizieren der neusten Datei in Punkt 1 wäre sehr komfortabel für mich, falls das nicht möglich ist, wäre auch ein Schleifendurchlauf durch alle Dateien mit 'XYZ' im Ordner möglich (und dann halt irgendwie Kopieren in 'XYZ_ZEITSTEMPEL.new' oder so


Ich hoffe mal, das ist mit ner batch-Datei überhaupt möglich

Es wäre wirklich SUPER, wenn mir jemand helfen könnte. Ich hoffe, ich habe genügend Info gepostet.

Danke schon mal im Voraus,
Simmon
Mitglied: bastla
15.01.2008 um 15:17 Uhr
Hallo Simmon und willkommen im Forum!

Ganz schematisch könnte das etwa so aussehen:
01.
@echo off & setlocal 
02.
set "Ordner=D:\Temp" 
03.
set "Muster=XYZ_*.log" 
04.
set "Neu=D:\Neu.txt" 
05.
set "Von=ABC" 
06.
set "Bis=DEF" 
07.
 
08.
if exist "%Neu%" del "%Neu% 
09.
 
10.
for /f "delims=" %%i in ('dir /b /od "%Ordner%\%Muster%" 2^>nul') do set "Neueste=%Ordner%\%%~nxi" 
11.
If not defined Neueste echo Keine passende Datei in %Ordner% gefunden! & goto :eof 
12.
 
13.
for /f "delims=:" %%i in ('findstr /n "%Von%" "%Neueste%"') do if not defined ZVon set ZVon=%%i 
14.
if not defined ZVon echo %Von% in %Neueste% nicht gefunden! & goto :eof 
15.
 
16.
for /f "delims=:" %%i in ('more +%ZVon% "%Neueste%"^|findstr /n "%Bis%" ') do if not defined ZBis set ZBis=%%i 
17.
if not defined ZBis echo %Bis% in %Neueste% nicht gefunden! & goto :eof 
18.
 
19.
for /f "tokens=1,2 delims=:" %%i in ('more +%ZVon% "%Neueste%"^|findstr /n $') do if %%i lss %ZBis% echo.%%j>>"%Neu%"
Die "dazwischen liegenden Zeilen" habe ich so interpretiert, dass die Zeilen mit den jeweiligen Kennzeichen ("ABC" bzw "DEF") nicht in die neue Datei geschrieben werden sollen.

Grüße
bastla

[Edit] Kleinere kosmetische Korrekturen bei Fehlermeldungen vorgenommen. [/Edit]
[Edit2] Durch Verwendung von "$" im letzten "findstr" Berücksichtigung ev Leerzeilen in der Ausgabe hinzugefügt. [/Edit2]
Bitte warten ..
Mitglied: Simmon
15.01.2008 um 15:42 Uhr
SUPER ! funktioniert schon mal ! Vielen Dank !

nur noch 2 Dinge fehlen mir zum Glück:

- die ersten 2 Zeilen des kopierten Textes beginnen mit ' ;'. Dieses Muster würde ich gerne in ein Gnuplot-Kommentar ändern. Also muss in den ersten 2 Zeilen des kopierten Text aus dem '' ein '#' werden. Kannst du mir da noch schnell helfen?

- ich würde das ganze gerne mit relativen Pfadangaben machen. In deinem Quellcode hast du absolute Angaben gemacht. Die batch-Datei befindet sich immer in dem Verzeichnis, in dem auch die .log Dateien sind. Die Datei 'Neu.txt' soll auch in diesem Ordner erstellt werden. Kann ich da die Pfadangaben weglassen bzw. wie lautet der Befehl für den aktuellen Pfad?

Gruß,
Simmon
Bitte warten ..
Mitglied: bastla
15.01.2008 um 15:59 Uhr
Hallo Simmon!

Die folgende Version bezieht das Verzeichnis aus dem Pfad der Batchdatei:
01.
@echo off & setlocal 
02.
set "Ordner=%~dp0" 
03.
set "Muster=XYZ_*.log" 
04.
set "Neu=%~dp0\Neu.txt" 
05.
set "Von=ABC" 
06.
set "Bis=DEF" 
07.
 
08.
if exist "%Neu%" del "%Neu% 
09.
 
10.
for /f "delims=" %%i in ('dir /b /od "%Ordner%\%Muster%" 2^>nul') do set "Neueste=%Ordner%\%%~nxi" 
11.
If not defined Neueste echo Keine passende Datei in %Ordner% gefunden! & goto :eof 
12.
 
13.
for /f "delims=:" %%i in ('findstr /n "%Von%" "%Neueste%"') do if not defined ZVon set ZVon=%%i 
14.
if not defined ZVon echo %Von% in %Neueste% nicht gefunden! & goto :eof 
15.
set /a Gr=2 
16.
 
17.
for /f "delims=:" %%i in ('more +%ZVon% "%Neueste%"^|findstr /n "%Bis%" ') do if not defined ZBis set ZBis=%%i 
18.
if not defined ZBis echo %Bis% in %Neueste% nicht gefunden! & goto :eof 
19.
 
20.
for /f "tokens=1,2 delims=:" %%i in ('more +%ZVon% "%Neueste%"^|findstr /n $') do if %%i lss %ZBis% set "Zeile=%%j" & call :ProcessLine %%i 
21.
goto :eof 
22.
 
23.
:ProcessLine 
24.
if %1 leq %Gr% if "%Zeile:~0,2%"=="//" set "Zeile=#%Zeile:~2%" 
25.
echo.%Zeile%>>"%Neu%"
Das Ersetzen von "//" am Zeilenanfang durch "#" habe ich auf die ersten beiden Zeilen beschränkt.

Leerzeilen im Bereich der auszugebenden Zeilen können (noch) nicht verarbeitet werden - bei Bedarf lässt sich da noch etwas machen. Da ich eigentlich auch sonst so gut wie nichts über den Inhalt der Log-Datei weiß, kann ich nicht abschätzen, ob sich durch die für das Ersetzen nötigen Änderungen Probleme mit Sonderzeichen ergeben werden.

Grüße
bastla

[Edit] Festlegung der Zeilengrenze für Ersetzungen auf "set /a Gr=2" korrigiert. [/Edit]
Bitte warten ..
Mitglied: Simmon
15.01.2008 um 16:12 Uhr
nochmal danke.

das mit den relativen Angaben klappt wunderbar. Das Ersetzen allerdings nicht. In der neuen Datei steht immer noch '//' in den ersten beiden Zeilen.

Leerzeilen spielen keine Rolle
Bitte warten ..
Mitglied: bastla
15.01.2008 um 16:16 Uhr
Hallo Simmon!

Mir ist eben schon aufgefallen, dass die Zeile
01.
set /a Gr=%Von%+2
nur
01.
set /a Gr=2
heißen sollte - ich ersetze das auch oben.

Grüße
bastla
Bitte warten ..
Mitglied: Simmon
15.01.2008 um 17:32 Uhr
Hi,

das mit dem Ersetzen funktioniert irgendwie immer noch nicht. Es hat sich aber mittlerweile ergeben, dass dies eigentlich nicht wichtig ist

Vielen dank für den super Support,
Simon
Bitte warten ..
Mitglied: bastla
15.01.2008 um 17:49 Uhr
Hallo Simmon!

das mit dem Ersetzen funktioniert irgendwie immer noch nicht.
Sollte (nach meinen mittlerweile vorgenommenen Tests) aber eigentlich an den Daten liegen (es werden jeweils die ersten beiden Zeichen der ersten beiden Ausgabezeilen überprüft und ggf ersetzt) - aber wenn Du' s ohnehin nicht mehr brauchst ...

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch: mit "dir" Befehl das neuste Lese- und Änderungsdatum auslesen
gelöst Frage von BatchAnfaenger91Batch & Shell11 Kommentare

Hallo, bin grad dabei ein Batch Skript zu schreiben komme aber nicht mehr weiter. Es hört sich für mich ...

Ubuntu
Vor- und Nachnamen mit einem bestimmten Muster aus einer Textdatei löschen
gelöst Frage von takitanoUbuntu15 Kommentare

Ok. Meine letzte Frage war ein bisschen undeutlich formuliert. Also hier ist ein neuer Versuch. Ich habe drei Text-Dateien: ...

Netzwerkmanagement
Batch Datei auf anderem PC öffnen
gelöst Frage von FlodscheNetzwerkmanagement35 Kommentare

Hallo, Folgende Situation: Wir haben einen Schulungsraum mit mehreren Schulungs PC's und mit einem Master PC. Von diesem Master ...

Batch & Shell
Batch soll an einem bestimmten Datum eine Website öffnen
gelöst Frage von YanmaiBatch & Shell3 Kommentare

Hallo ihr Administratoren, ich brauche eine .bat Datei, die an einem bestimmten Datum eine Website öffnet. Hier einmal meine ...

Neue Wissensbeiträge
Router & Routing

PfSense als Addon auf QNAP

Information von magicteddy vor 4 StundenRouter & Routing1 Kommentar

Moin, für Spielereien eine ganz nette Idee aber ich fürchte das soetwas auch als echte Firewall genutzt wird: In ...

Datenschutz

Teamviewer kommt für IoT-Geräte wie den Raspberry Pi

Information von magicteddy vor 11 StundenDatenschutz

Moin, jetzt werden IoT Geräte endgültig zur Wanze? Anscheinend kann man auf einem Dashboard seine Geräte visualisieren Ich stelle ...

Microsoft

Letzte Updates für Win10 und Server2016 müssen bei Bedarf über den Update catalogue in den WSUS importiert werden!

Tipp von DerWoWusste vor 16 StundenMicrosoft1 Kommentar

automatisch kommt da nichts an im WSUS und auch nicht im SCCM. Siehe Hinweise zum Bezug der jeweils neuesten ...

Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 3 TagenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Preis für Wartungsvertrag ok?
gelöst Frage von a-za-zNetzwerkmanagement22 Kommentare

Hallo! Mal ne Frage, weil ich mich mit dem akzeptablen Preis für einen Reaktionszeitvertrag nicht auskenne. Meine Firma hat ...

Windows Netzwerk
Ist ein Portforwarding auf einen PC ohne lauschendes Programm ein (großes) Sicherheitsproblem?
Frage von PluwimWindows Netzwerk13 Kommentare

Hallo zusammen, zur Fernwartung eines Rechners an einem anderen Ort nutze ich VNC. Da dieser Rechner einfach nur eine ...

Windows Server
Terminal Server 2016 erkennt Berechtigungen nicht
gelöst Frage von Thomas2Windows Server10 Kommentare

Hallo Administratoren, folgendes Problem stellt sich dar: Es gibt zwei Windows Server 2016, die als Terminal Server fungieren. Jetzt ...

Sonstige Systeme
7-zip: Programm frägt nach Passwort erst bei einzelnen Dateien
Frage von freeskierchrisSonstige Systeme7 Kommentare

Guten Morgen, ich habe ein Problem beim Arbeiten mit 7-zip: Wenn ich die einzelnen Dateien zu einem Archiv verpacke ...