Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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
Kommentar vom Moderator Biber am 31.01.2011 um 10:33:43 Uhr
Codeformatierung und verschoben von "Windows-weiss-nich'-genau" nach Bätchkrams".
GELÖST

Per Batch alles über 5000 Zeilen in einer Textdatei löschen

Frage Entwicklung Batch & Shell

Mitglied: fyrb38

fyrb38 (Level 1) - Jetzt verbinden

31.01.2011, aktualisiert 14:55 Uhr, 3363 Aufrufe, 3 Kommentare

Guten Morgen,

ich bin totaler Anfänger in Batchdateien.
Ich habe laufe letzter Woche eine Batchdatei mit Hilfe von google etc. geschrieben.
Diese Datei soll eine bestimmte Datei "Hilfsdatei.txt" überprüfen, wie alt diese ist.
Wenn diese Datei älter als 15 Minuten ist, wird eine "Alarm.txt" Datei erstellt. In dieser Datei stehen dann Datum, Uhrzeit und dass die Datei nicht mehr aktuell ist.
Das ganze Vorgehen, sprich, Datum, Uhrzeit und einfach nochmal ein Zusatz, ob die Hilfsdatei aktuell ist oder nicht, wird im log.txt festgehalten.
Mein Wunsch ist nun, dass alles was über 5000 Zeilen im log.txt steht, gelöscht wird.

Ich habe schon recherchiert und auch in diesem Forum was dazu gefunden, nur leider gab es keine Erklärungen dazu und konnte nicht viel damit anfangen
Falls noch irgendwelche Angaben benötigt werden, einfach melden

Noch eine Bitte, ob ihr bei euren Antworten Zeile für Zeile erklären könntet. Wie gesagt, ich bin Anfänger und möchte verstehen, was ich da mache.
Vielen Dank schonmal im Voraus und hier mein Skript:

01.
ECHO ON 
02.
 
03.
SET Zieldatei=C:\Test\Hilfsdatei.txt 
04.
SET LastModified=15  
05.
SET LOGPATH="C:\XXX\Test1\log.txt"  
06.
SET ALARMPATH="C:\XXX\Test1\Alarm.txt" 
07.
 
08.
ECHO Aktuelles Datum: >> %LOGPATH% 
09.
Date /t	>> %LOGPATH%  
10.
ECHO ------------------ >> %LOGPATH%  
11.
Echo Aktuelle Uhrzeit: >> %LOGPATH%  
12.
Time /t >> %LOGPATH%  
13.
 
14.
IF NOT EXIST %Zieldatei% GOTO :FILEDOESNOTEXIST 
15.
"C:\XXX\Test1\WasFile" %Zieldatei% modified before now-%LastModified% >> %LOGPATH%  
16.
if not errorlevel 1 goto TRUE >> %LOGPATH% 
17.
if not errorlevel 0 goto FALSE >> %LOGPATH% 
18.
  
19.
 
20.
:LASTMODIFICATION >> %LOGPATH%  
21.
ECHO ==================================================================================== >> %LOGPATH% 
22.
EXIT  
23.
 
24.
 
25.
:TRUE   
26.
ECHO ==================================================================================== >> %ALARMPATH%  
27.
ECHO Datei wurde NICHT innerhalb der letzten 15 Minuten aktualisiert. >> %ALARMPATH% 
28.
ECHO. >>%ALARMPATH% 
29.
ECHO Aktuelles Datum: >> %ALARMPATH%  
30.
Date /t	>> %ALARMPATH%  
31.
ECHO ------------------ >> %ALARMPATH%  
32.
Echo Aktuelle Uhrzeit: >> %ALARMPATH%  
33.
Time /t >> %ALARMPATH% 
34.
ECHO. >> %ALARMPATH% 
35.
ECHO ==================================================================================== >> %ALARMPATH% 
36.
 
37.
 
38.
ECHO. >>%LOGPATH% 
39.
ECHO Datei wurde NICHT innerhalb der letzten 15 Minuten aktualisiert. >> %LOGPATH%  
40.
ECHO ==================================================================================== >> %LOGPATH%  
41.
EXIT 
42.
 
43.
 
44.
:FALSE   
45.
ECHO ==================================================================================== >> %LOGPATH%  
46.
ECHO Datei wurde innerhalb der letzten 15 Minuten aktualisiert. >> %LOGPATH%  
47.
ECHO ==================================================================================== >> %LOGPATH%  
48.
EXIT 
49.
  
50.
 
51.
:ERROR  
52.
ECHO Datei nicht gefunden 
53.
EXIT  
54.
 
55.
 
56.
 
57.
:FILEDOESNOTEXIST  
58.
ECHO ==================================================================================== >> %LOGPATH%  
59.
EXIT
Mitglied: bastla
31.01.2011 um 14:42 Uhr
Hallo fyrb38!

Das Kürzen der Logdatei ließe sich im einfachsten Fall (und nur mit Bordmitteln) etwa so realisieren:
01.
set "LogTemp=%temp%\Log.txt" 
02.
del "%LogTemp%" 2>nul 
03.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%LOGPATH%"') do if %%i leq 5000 >>"%LogTemp%" echo\%%j 
04.
move "%LogTemp%" "%Log%"
Kurze Erklärung:
Da der Name der temporären Logdatei öfter benötigt wird, ist es sinnvoll, ihn einer Variablen zuzuweisen.

Eigentlich sollte es die temporäre Logdatei nicht (mehr) geben, aber sicher ist sicher, und daher wird sie vorweg gelöscht. Die unschöne Fehlermeldung, falls sie erwartungsgemäß tatsächlich nicht vorhanden ist, kann man/frau per "2>nul" elegant verschwinden lassen.

Mit der "for /f"-Schleife kann ein Dateiinhalt (oder auch, wie hier, die Ausgabe eines Befehles) zeilenweise abgearbeitet werden, wobei durch die Angabe eines Trennzeichens ("delimiter", hier: ":") und die Festlegung der benötigten Teilstücke ("tokens", hier: Teil 1 vor dem ersten ":" und der Rest = alles nach dem ersten ":") eine Zerlegung dieser Zeile vorgenommen werden kann. Die entstehenden Teile werden anhand des vorgegebenen Anfangsbuchstaben der "Laufvariablen" benannt - hier entstehen also die Teile "%%i" und "%%j".

Die angesprochenen Einzelzeilen entstehen aufgrund der Ausgabe des Befehles "findstr /n "^" "%LOGPATH%". Durch die Suche nach "^" (entspricht einem Zeilenanfang, und den hat sogar eine ansonsten leere Zeile) werden alle Zeilen der Logdatei gefunden und (wegen "/n") nummeriert im Format
1:Das ist die erste Zeile 
... 
5000:Hier hätten wir Zeile 5000 ... 
5001:... und 5001 
... 
18267:Endlich am Ende!
ausgegeben. Wenn diese Zeilen nun am ":" geteilt werden, steht im ersten Teil die Zeilennummer und im zweiten Teil der gesamte Zeileninhalt.

Das für jede Zeile ausgeführte "if %%i leq 5000" prüft nun die Zeilennummer darauf hin, ob sie <= ("less or equal") 5000 ist und gibt nur in diesem Fall die Zeile in die temporäre Logdatei aus.

Die Schreibweise "echo\%%j" sorgt durch den "\" dafür, dass im Falle, dass %%j keinen Inhalt hat (= Leerzeile), nicht die Statusinformation "ECHO ist eingeschaltet (ON).", sondern tatsächlich eine Leerzeile in die temporäre Logdatei geschrieben wird.

Nach der Schleife enthält die temporäre Logdatei nur die ersten 5000 Zeilen und kann nun die Originaldatei ersetzen. Durch die Verwendung von "move" wird dabei gleichzeitig die Temporärdatei de facto gelöscht.

Grüße
bastla

P.S.: Die Zeilen 5, 6 und 15 würde ich etwas anonymer gestalten ...
Bitte warten ..
Mitglied: fyrb38
31.01.2011 um 15:02 Uhr
Hallo Bastla,

Vielen Dank schonmal, auch für den den Hinweis auf Zeile 5, 6 und 15.
Ich bin mittlerweile weiter gekommen und das Problem ist vielleicht schon gelöst.
Ich werd mir bei Zeit deinen Beitrag nochmal in Ruhe durchlesen, da es mir wichtig ist mehr und mehr dazu zu lernen.
Auf jeden Fall, werd ich mich melden, sobald das Produkt fertig ist oder noch Fragen offen sind.

Grüße
Bitte warten ..
Mitglied: pieh-ejdsch
31.01.2011 um 20:52 Uhr
moin Ihr beiden,
das mit dem 5000 Zeilen ist ja schon OK --- ABER,
Zitat von fyrb38:
Das ganze Vorgehen, sprich, Datum, Uhrzeit und einfach nochmal ein Zusatz, ob die Hilfsdatei aktuell ist oder nicht, wird im log.txt festgehalten.
Mein Wunsch ist nun, dass alles was über 5000 Zeilen im log.txt steht, gelöscht wird.
15."C:\XXX\Test1\WasFile" %Zieldatei% modified before now-%LastModified% >> %LOGPATH% 
usw...
wenn in diese Log.txt neue Informationen drangeschrieben werden kannst Du die 5000 Zeilen auch ausdrucken und an die Wand hängen - ist genauso Aktuell wie immer!!

um der Allgemeinen Betriebsblindheit etwas beizutragen:
01.
move "%logpath%" "%logpath%00" 
02.
for /f "delims=:" %%j in ('findstr /n "^" "%logpath%00" ^|find /c ":"') do for /f %%k in ('set /a "Lines=%%j-5000"') do if %%k gtr 0 (more +%%k "%logpath%00">"%logpath%") else move  "%logpath%00" "%logpath%"
Erklärung:
log.txt wird in log.txt00 Umbenannt
die Anweisung in der 1. Forschleife holt die Zeilenanzahl in %%j.
deswegen wird in der Zweiten Forschleife die zu Überspringenden Zeilen=(Zeilenanzahl)-(zu Überspringende Zeilen) ausgerechnet.
wenn das Ergebnis kleiner als 1 ist wird die log.txt zurückbewegt, sonst werden die max letzten 5000 Zeilen in die log.txt geschrieben.

Gruß Phil
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (14)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...