![]() |
Textdokument per Batch auswerten
Hallo,
ich hoffe ihr könnt mir beim erstellen einer Batch Datei behilflich sein. Ich habe in einem Verzeichnis sehr viele Logfiles in denen immer wieder „Datum Errorxx“ Einträge vorhanden sind. Um diese zu filter habe ich den find Befehl benutzt. Anschließend werden alle Error Zeilen mit dem >> Befehl in ein neues File geschrieben. Dies sieht dann in etwa folgermaßen aus: 01.01.2018_12:34 Error12 01.01.2018_13:45 Error03 01.01.2018_14:34 Error12 01.01.2018_16:45 Error08 Ich möchte jetzt eine zusätzliche Batch erstellen, welche die jeweiligen Zeilen auswertet Dies sollte folgermaßen aussehen: 01.01.2018_12:34 Error12 Motor1 01.01.2018_13:45 Error03 Motor2 01.01.2018_14:34 Error12 Motor1 01.01.2018_16:45 Error08 Motor3 Soweit es dies verstanden habe kann ich wieder mit dem find Befehl arbeiten. Aber dann weiß ich leider nicht mehr weiter. Ich hoffe ihr könnt mich ein bischen unterstützen bzw. ein paar Ratschläge geben. Schönen Abend |
Bevor dir hier keiner antwortet :D
Das gesamts***** sollte so aussehen?: -->ERRORXXlogs aus verschiedenen Dateien in Verzeichnis in eine neue log Datei schreiben. 01.01.2018_12:34 Error12 01.01.2018_13:45 Error03 01.01.2018_14:34 Error12 01.01.2018_16:45 Error08 -->im nächsten Schritt soll die neue Log Datei ausgewertet werden. Hier wird von jeder Zeile der Error ausgewertet so ist z.B. (Error12 => Motor1). Und das soll dann in eine neue Zeile/ dahinter etc. geschrieben werden. 01.01.2018_12:34 Error12 Motor1 01.01.2018_13:45 Error03 Motor2 01.01.2018_14:34 Error12 Motor1 01.01.2018_16:45 Error08 Motor3 Wo ist die Fehlerübersicht? Wie viele Fehler gibt es? Bzw. du könntest das auch ohne zwischen Log-File auswerten. Mein Ratschlag: geh weg von Batch und mach das kleine S***** mit python |
Zum Ersten solltest du da mal in der "Programmierabteilung" nachfragen...
[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...] Zum Zweiten solltest du mal deinen Code posten, da kann man bestimmt gleich die Auswertung mit einfügen. Wenn es nicht zu viele Möglichkeiten sind bzw. nur 3 ist das mit einer einfachen oder mehrfachen "if (else)-Anweisung" bestimmt möglich. Das geht natürlich auch mit vielen Möglichkeiten; aber naja... das wird irgendwann unübersichtlich. Zum Dritten würde ich es mit Excel machen. Ich könnte es heute nicht mehr, aber die Auswertung wird später sicher übersichtlicher und kann beliebig erweitert werden... könntest mal in "Herbers Excel Forum" fragen... hier mal ein ungefähres Beispiel: [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...] |
Zitat:
Thema verschoben |
Danke für die Antworten.
@0x331 Es gibt ca. 30 Fehler. Ich habe die Fehlerübersicht aktuell einfach nur in einem Textdokument. Ich habe im Internet folgenden Code gefunden. @echo off &setlocal set "search=%" set "replace=%2" set "textfile=Input.txt" set "newfile=Output.txt" (for /f "delims=" %%i in (%textfile%) do ( set "line=%%i" setlocal enabledelayedexpansion set "line=!line:%search%=%replace%!" echo(!line! endlocal ))>"%newfile%" del %textfile% rename %newfile% %textfile% Dies war mein erster Ansatz welchen ich leider nicht komplett funktionsfähig hingebracht habe. Bei diesem Code müsste ich dann für jeden Fehler den Code anpassen und in der Batch ergänzen was natürlich extrem umständlich ist. @eitch100 Ich hab mir gedacht ein Batch Programm ist für die "Programmierabteilung" ein bischen unterdimensioniert :D Ich habe z.B. 40 Logfiles auf meinem PC In meiner aktuellen Batch Datei führe ich eigentlich nur folgende Zeile aus. find "error" C:\Logfiles\*.log >> C:\Logfiles\Errorergebnis.txt Dadurch bekomme ich ein .txt File in dem alle Zeilen welche einen Error Eintrag enthalten zusammenfasst. Mein neuer Ansatz: Zu beginn der Batch Datei definiere ich die Fehlerliste set 1.0=Error03 set 1.1=Motor2 set 2.0=Error12 set 2.1=Motor1 x.0 Steht für den Error Code welcher in den Logfiles ist. x.1 Steht für den Text der anstatt des Error Code angezeigt werden soll Das Filtern der Error Einträge bleibt gleich: find "error" C:\Logfiles\*.log >> C:\Logfiles\Errorergebnis.txt Jetzt weis ich aber nicht mehr weiter. Ich brauche eine Schleife welche nacheinander das Errorergebnis.txt File nach 1.0, 2.0,... durchsucht und falls z.B. 1.0 gefunden wird eine Zeile mit 1.1 ergänzt. Zum Schluss würde das Errorergebnis.txt folgendermaßen ausschauen: 01.01.2018_14:34 Error12 Motor1 01.01.2018_16:45 Error08 Motor3 Könntet ihr mir da noch ein paar Tipps geben um dies zu realisieren. Wie ihr schon geschrieben habt könnte dieser Ablauf natürlich mit anderen Programmen z.B. Excel oder Phyton einfacher realisiert werden. Mein Problem ist jedoch ich möchte unabhängig auf jeden beliebigen Rechner diese Batch starten können und deshalb würde ich gerne bei Batch bleiben. Schönen Abend. |
Zitat:
Zitat:
Da du auf diese weise ohnehin jedesmal die Ausgangsliste löschen und neu erstellen musst kannst du die Liste auch gleich in der Shell ausgeben. Zitat:
Zitat:
Herr Gott. Warum du aus ner Fehlerliste eine Liste mit speziellen Fehlern erstellen willst und aus dieser dann noch eine mit der Übersetzung der Fehler leuchtet mir nicht ein. Schreib ein Python s***** das die Logdatei Zeile für Zeile einliest, verwende slicing um den Fehlercode zu isolieren, immerhin scheinen die Zeilen immer 23 Zeichen lang zu sein wobei der Fehlercode immer ln[-7] - ln[-1] ist, ersetzt mithilfe eines Dictionaries den Fehlercode direkt durch den Motor der den Fehler geschossen hat und gib die Zeile zum Schluss in der Shell aus, mit nem Alias braucht son s***** nichtmal ne Sekunde zur Ausführung. |
@Kaiser11:
Das hier ist ja schon eine Art "Replace" wenn ich die Semantik richtig erfasse: Code:
@echo off &setlocal Weil dir plattformunabhängigkeit wichtig war kannste aber auch Java nehmen. Das nötige JRE kannste für nahezu jede Plattform bekommen. Und dann vielleicht so: Code:
import java.io.File; Man könnte das auch per java noch wieder in eine Datei schreiben - hatte ich aber keine Lust mehr drauf ... ;) Es wird übrigens wirklich ersetzt und nicht eine neue Zeile eingebaut. Weil das war das was das Code-Schnippsel das du oben hattest auch macht wenn ich die Semantik richtig verstanden hatte. Also du bekommst dann so eine Ausgabe: Code:
run: |
https://abload.de/img/screenshot_20181211-0ezihf.jpg
Jetzt weiss ich wieder warum ich kein Java nutze, in Ruby erklärt sich der Code fast von selbst. Sorry für die lange Dauer bis zur Antwort, hab im Mom nur wenig Zeit. https://abload.de/img/screenshot_20181215-1pqiu9.jpg Hier die PeP konforme Python Version, die erste war durch das über tragen des anderen Codes Mist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:54 Uhr. |
Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.