Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

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

Letzte 10 Zeilen aus Dateien lesen

Frage Entwicklung Batch & Shell

Mitglied: didie08

didie08 (Level 1) - Jetzt verbinden

02.05.2012, aktualisiert 18.10.2012, 2431 Aufrufe, 7 Kommentare

Ich brauche Hilfe beim verwendeden von foschleifen

Hallo

Ich habe in einem Ordner Logfiles stehen. Von diesen Logfiles möchte ich jeweils die letzten 10 Zeilen in einer Auswertung zusammenfassen. Ich habe mir gedacht dies mit einer verschachtelten forschleife zu tun. In der ersten Schleife zähle ich die Zeilen und in der zweiten Schleife überspringe ich die nicht benötigten Zeilen. Hier habe ich nun aber das Problem, dass meine Variable %zeile_neu% von der skip Funktion nicht erkannt wird. Kann mir jemamand sagen warum nicht?


01.
  
02.
echo on & setlocal EnableDelayedExpansion 
03.
rem liste der Logfiles 
04.
rem 
05.
dir /B D:\wzb-daten-transfer\logs\cz\*.log>templiste1.txt 
06.
 
07.
for /f "tokens=1,* delims= " %%i in (templiste1.txt) do ( 
08.
                                       	 
09.
	set zeilen=0 
10.
 
11.
	rem Zeilen zaehlen. 
12.
 
13.
	for /f "tokens=* delims= " %%k in (D:\wzb-daten-transfer\logs\cz\%%i) do ( 
14.
	set /a zeilen=!zeilen!+1 
15.
	echo !zeilen! 
16.
 
17.
18.
	 
19.
	set /a zeile_neu=!zeilen!-10 
20.
 
21.
	echo !zeile_neu! 
22.
  
23.
	for /f "tokens=* skip=!zeile_neu! delims= " %%m in (D:\wzb-daten-transfer\logs\cz\%%i) do ( 
24.
 
25.
	echo %%m>>D:\wzb-daten-transfer\logs\cz\auswertung.log 
26.
 
27.
28.
	 
29.
30.
 
Gruß
didie08
Mitglied: Skyemugen
02.05.2012, aktualisiert 18.10.2012
Aloha,

warum so viel gewurstel, unser lieber bastla hat da mal was hingekritzelt (bzw. eben die dort auch genannte tail.exe nutzen)

greetz André

P.S.: ein einfaches Nutzen von %zeile_neu% sollte das Problem beheben
Bitte warten ..
Mitglied: bastla
02.05.2012, aktualisiert 18.10.2012
Hallo didie08!

Ich würde eher so (ungetestet) an die Sache herangehen:
01.
echo on & setlocal 
02.
for /f "tokens=1,* delims= " %%i in ('dir /B D:\wzb-daten-transfer\logs\cz\*.log') do call :ProcessFile "D:\wzb-daten-transfer\logs\cz\%%i" 
03.
goto :eof                                       	 
04.
 
05.
:ProcessFile 
06.
for /f "delims=:" %%a in ('find /c /v "!!!!!"<%1') do set "zeilen=%%a" 
07.
set /a zeile_neu=zeilen-10 
08.
echo %zeile_neu% 
09.
more +%zeile_neu% %1>>D:\wzb-daten-transfer\logs\cz\auswertung.log 
10.
goto :eof
Ganz klar ist mir übrigens Deine erste Schleife (die ich einfach mal übernommen habe) nicht - eigentlich sollte die eher so aussehen:
for /f "delims=" %%i in ('dir /B D:\wzb-daten-transfer\logs\cz\*.log') do call :ProcessFile "D:\wzb-daten-transfer\logs\cz\%%i"
Übrigens: Sollte es in den Dateien Zeilen mit "!!!!!" geben, einfach eine andere Zeichenfolge, die sicher nicht enthalten ist, in der Zeile 6 des Batches verwenden ...

Grüße
bastla

[Edit] @skye
Das hätte ich vermutlich auch gefunden - aber mal leicht verändert "kritzeln" ist ja auch schön ...
[/Edit]
Bitte warten ..
Mitglied: 106009
02.05.2012 um 15:48 Uhr
gelöscht, unnötig Zeit verplempert.
Bitte warten ..
Mitglied: didie08
02.05.2012 um 17:16 Uhr
Hallo bastla

Vielen Dank für die schnelle Antwort.

Leider werden die Schleifen nicht durchlaufen. Ich habe eine echo %1>>testlog1.txt in der 2 Schleife eingebaut um das zü prufen. Diese testlog1.txt enthält nur eine Zeile.

01.
echo on & setlocal 
02.
 
03.
for /f "tokens=* delims=" %%i in ('dir /B D:\wzb-daten-transfer\logs\cz\*.log') do ( 
04.
call :ProcessFile "D:\wzb-daten-transfer\logs\cz\%%i" 
05.
goto :eof 
06.
 
07.
08.
 
09.
 
10.
:ProcessFile 
11.
echo %1>>testlog1.txt 
12.
 
13.
for /f "tockens=* delims=:" %%a in ('find /c /v "!!!!!"<%1') do ( 
14.
set "zeilen=%%a" 
15.
set /a zeile_neu=zeilen-10 
16.
echo %zeile_neu% 
17.
more +%zeile_neu% %1>>D:\wzb-daten-transfer\logs\cz\auswertung.log 
18.
goto :eof 
19.
pause 
20.
 
21.
22.
 
Gruß
didie08
Bitte warten ..
Mitglied: bastla
02.05.2012 um 17:24 Uhr
Hallo didie08!

Vorschlag: Ersetze, wenn Dir denn schon nach Änderungen ist, meine Zeile 6 durch
for /f %%a in ('find /c /v "!!!!!"^<%1') do set "zeilen=%%a"
(nötig wär's nicht [Edit] wegen des delimiters, aber das "^" fehlte dann doch sehr [/Edit]), belasse dafür den Rest meines Ansatzes so, wie ich ihn geschrieben habe und teste mal damit ...

Grüße
bastla
Bitte warten ..
Mitglied: didie08
03.05.2012 um 14:52 Uhr
Hallo Bastla.

Ich hatte das Beispiel von dir verädert weil sich garnichts getan hatte, und ich dachte ich müsste den Code noch entsprechend ergänzen.

Nachdem ich nun dienen Code unverändert mit der geänderten Zeile 6 verwendet habe, funktioniert die bat einwandfrei. Super vielen Dank dafür.

Was mich noch gerne wissen würde, warum ist das ^ so entscheidend?

Gruß
didie08
Bitte warten ..
Mitglied: Skyemugen
03.05.2012 um 15:52 Uhr
Aloha,

hmm also
tockens=
Was'n das?

greetz André

P.S.: Ohne zu escapen ^ würde da nix mit < in der Verarbeitungsklammer laufen, da macht dir der Interpreter den H. M. Murdock

offtopic ... ollidolli er innert mich mehr und mehr an Kaputtnick ... gelöscht, unnötig Zeit verplempert ... ja, das war genau seine Art
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Bei copy aus FOR Schleife wird letzte Zeile abgeschnitten

Frage von miczar zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch um Satz zwischen Anführungszeichen aus 1. Zeile in Textdatei lesen (3)

Frage von georg2204 zum Thema Batch & Shell ...

Datenbanken
gelöst Oracle Datenbank-Tabellenabfrage, letzten 10 Einträge (2)

Frage von internet2107 zum Thema Datenbanken ...

Neue Wissensbeiträge
Humor (lol)

Wohnt jemand in Belgien und kann nicht mehr ruhig ausschlafen?

(5)

Information von LordGurke zum Thema Humor (lol) ...

Sicherheits-Tools

Trendmicro OSCE und das Fall Creators Update Win10 RS3

(3)

Information von Henere zum Thema Sicherheits-Tools ...

Microsoft Office

Text in Zahlen umwandeln

Tipp von logische zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Windows Server
Gruppenrichtlinie greift nicht zu! (24)

Frage von Syosse zum Thema Windows Server ...

Hosting & Housing
Mailserver Software Empfehlungen (21)

Frage von sunics zum Thema Hosting & Housing ...

Voice over IP
DeutschlandLAN IP Voice Data M Premium, Erfahrung mit Faxgeräte? (16)

Frage von liquidbase zum Thema Voice over IP ...