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-Key: 76947

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

Printed on: April 18, 2024 at 03:04 o'clock

Member: Fraenky
Fraenky Jan 01, 2008 at 10:59:12 (UTC)
Goto Top
Frohes Neues.

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

Gruß
Fraenky
Member: bastla
bastla Jan 01, 2008, updated at Oct 18, 2012 at 16:35:15 (UTC)
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]
Member: Xalimeo
Xalimeo Jan 01, 2008 at 23:01:44 (UTC)
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.
Member: bastla
bastla Jan 02, 2008 at 00:32:32 (UTC)
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 ...
Member: Biber
Biber Jan 04, 2008 at 14:37:36 (UTC)
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
Member: Biber
Biber Jan 12, 2008 at 18:08:00 (UTC)
Goto Top
Beitrag auf "Gelöst" gesetzt und geschlossen.