xalimeo
Goto Top

Batch - Mit batch eine txt verändern bzw kürzen (siehe Posting)

Möchte Logs kürzen (siehe Beitrag)

Ein schönen Sylvesterabend an alle!

Ich bin dabei ein BackUp-Programm zu schreiben für mein System.

Konzept:
1: Virenscan (mit log)
2: Sicherheitskopie der wichtigsten Verzeichnisse auf andere HDD machen (mit log)
3: Sicherheitskopie packen (mit log) (danach Orignal behalten oder nicht, je nach Wahl)
4: Image vom System erstellen

Klingt einfach?
Ist es auch! (Relativ)

"Problem":
Läuft alles einwandfrei soweit, bis auf den einen "Schönheitsfehler", dass die logs doch recht lang ausfallen (~2MB und grösser).
Zumindest das vom AntiViren-Test. Da bräuchte ich nur die letzten 7 Zeilen (Zusammenfassung) und vom Log des Packvorgangs eigentlich nur die Hälfte (Zeilenanzahl variiert).
Das BackUp wird erst gepackt und dann das Archiv getestet, jedoch landet beides in einem logfile. Ich bräuchte aber nur den Teil des logs, in dem das Archiv getestet wird.


P.S.:
Einen guten Rutsch ins neue Jahr! *Prost*


[Edit Biber]Beitrag verschoben von "Windows" nach "Batch & Shell"[/Edit]

Content-ID: 76947

Url: https://administrator.de/contentid/76947

Ausgedruckt am: 16.11.2024 um 05:11 Uhr

Fraenky
Fraenky 01.01.2008 um 11:59:12 Uhr
Goto Top
Frohes Neues.

Ich würde diesen Beitrag unter
Entwicklung/Programmiersprachen/Batch & Shell
einstellen.

Gruß
Fraenky
bastla
bastla 01.01.2008, aktualisiert am 18.10.2012 um 18:35:15 Uhr
Goto Top
Hallo Xalimeo und willkommen im Forum!

Ähnliche Fragestellungen haben wir immer wieder, neulich etwa hier ...

Das Finden der Zeilennummer, bis zu welcher/ab welcher das Logfile benötigt wird, lässt sich mit "findstr" bewerkstellligen, etwa für das erste Vorkommen des Suchkriteriums:
@echo off & setlocal
set Zeile=
for /f "delims=:" %%i in ('findstr /n /c:"Dein Suchkriterium" "Deine LogDatei.log"') do if not defined Zeile set Zeile=%%i  
echo %Zeile%
Für die letzte Zeile, welche das Suchkriterium enthält, findest Du die Zeilennummer so:
@echo off & setlocal
for /f "delims=:" %%i in ('findstr /n /c:"Dein Suchkriterium" "Deine LogDatei.log"') do set Zeile=%%i  
echo %Zeile%
Falls das Suchkriterium am Beginn der Zeile stehen muss, kannst Du zusätzlich noch "/b" verwenden (siehe "findstr /?").

Grüße
bastla

[Edit] Hatte ein "n" verlegt, aber inzwischen wieder gefunden und gleich in der ersten Textzeile hinter "habe" platziert ... [/Edit]
Xalimeo
Xalimeo 02.01.2008 um 00:01:44 Uhr
Goto Top
Frohes Neues.

Ich würde diesen Beitrag unter
Entwicklung/Programmiersprachen/Batch &
Shell
einstellen.

Gruß
Fraenky
Tut mir leid, aber ich hatte noch nicht wirklich die Zeit mich hier überall umzugucken.
Habe auch zu sehr den Gedanken des BackUps eines Windows-Systems im Kopf gehabt und deswegen gleich hier gepostet. Da war ich vielleicht ein wenig vorschnell. Sorry.


[...]
@echo off & setlocal
set Zeile=
for /f "delims=:" %%i in ('findstr /n /c:"Dein Suchkriterium" "Deine LogDatei.log"') do if not defined Zeile set Zeile=%%i  
echo %Zeile%
Falls das Suchkriterium am Beginn der Zeile stehen muss, kannst Du zusätzlich noch "/b" verwenden (siehe "findstr /?").

Grüße
bastla
Super, das klappt hervorragend!
Jetzt hab ich nurnoch das Problemchen, dass ich die beiden Zeilennummer der jeweiligen Datei entweder nur im Prompt angezeigt kriege, oder die Ausgabe in eine txt ausgeben lasse.
Und nun würd ich gerne die txt auslesen und den Inhalt (Anfangs- und EndZeilennummer des Logs, wie ich es nachher haben möchte) im Program weiterverwenden.
Hab hier schon ein bisschen rumgelesen und Google, etc gefragt, jedoch nichts passendes finden können.
bastla
bastla 02.01.2008 um 01:32:32 Uhr
Goto Top
Hallo Xalimeo!

Die jeweilige Zeilennummer steht ja in der Variable %Zeile%, welche Du dann entsprechend einsetzen kannst.

Wenn Du zwei verschiedene Zeilennummern benötigst, einfach zwei "for"-Schleifen mit verschiedenen Variablen zB (VonZeile und BisZeile) verwenden. Die Ausgabe würde dann etwa so erfolgen (jeweils inklusive Von- und BisZeile):
for /f "delims=: tokens=1,*" %%i in ('findstr /n $ "Deine Logdatei.txt"') do if %%i geq %VonZeile% if %%i leq %BisZeile% echo.%%j  
"geq" ("greater or equal" = "größer oder gleich") und "leq" ("less or equal" = "kleiner oder gleich") kannst Du auch durch "gtr" bzw "lss" ersetzen - siehe dazu "if /?".

Grüße
bastla

P.S.: Es spricht eigentlich nichts dagegen, nur auszugsweise aus den vorhergehenden Kommentaren zu zitieren ...
Biber
Biber 04.01.2008 um 15:37:36 Uhr
Goto Top
Moin Xalimeo,

ist denn Deine Frage hinreichend beantwortet oder sind noch Fragen offen?
Falls noch etwas klemmt, dann poste Deinen bisherigen Code mit einer konkreten Problemstellung.
Falls nein, setze bitte einen "Erledigt"-Haken, damit ich den Beitrag schließen kann.

Danke
Biber
Biber
Biber 12.01.2008 um 19:08:00 Uhr
Goto Top
Beitrag auf "Gelöst" gesetzt und geschlossen.