71590

Alle Zeilen außer die letzten 25 in Textdatei löschen

Hallo,
ich würde gerne per Batch alle Zeilen aus einer Textdatei außer die letzten 25 Zeilen löschen.
In der Textdatei befinden sich unterschiedliche Texte, jedoch immer zwei Zeilen Text und eine eine Zeile frei dazwischen, dann wieder zwei Zeilen Text usw., am Ende der Datei sind immer zwei Zeilen frei. Die Datei hat immer eine unterschiedliche Anzahl an Zeilen, das macht die Sache schwierig.
Diese Ordnung soll mit allen Freiräumen beibehalten werden, nur eben immer nur die letzten 25 Zeilen, alles andere soll gelöscht werden.

Gibt es eine Möglichkeit, das zu realisieren?
Danke im Voraus!
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 106281

Url: https://administrator.de/forum/alle-zeilen-ausser-die-letzten-25-in-textdatei-loeschen-106281.html

Ausgedruckt am: 24.05.2025 um 08:05 Uhr

60730
60730 16.01.2009, aktualisiert am 18.10.2012 um 18:37:37 Uhr
Goto Top
Servus,

wenn ich 25 gewünschte Zeilen durch 3 zwei Zeilen Text und eine eine Zeile frei Teile - komme ich aber auf eine ganz krumme Zahl face-wink

Wenn das nicht weiter tragisch ist, dann schau dir Bastlas Weg mal an, den mußt du nur umgekehrt nehmen.


Gruß
bastla
bastla 16.01.2009 um 18:42:46 Uhr
Goto Top
Hallo Exterminator und TimoBeil!

Einen anderen als den oben angesprochenen Weg hätte ich auch noch anzubieten:
@echo off & setlocal
set "Datei=D:\Deine Datei.txt"  
set "Zeilen=25"  

Set R=%temp%\Reduce.vbs
> %R% echo Set fso=CreateObject("Scripting.FileSystemObject"):F="%Datei%":T=Split(fso.OpenTextFile(F).ReadAll, vbCrLF)  
>>%R% echo U=UBound(T):Set O=fso.CreateTextFile(F,True):For i=U-%Zeilen%+1 To U-1:O.WriteLine T(i):Next:O.Write T(U):O.Close
cscript //nologo %R%
In dieser Fassung wird die Datei selbst (ohne Sicherungskopie) auf die letzten 25 Zeilen reduziert. Außerdem erfolgt keine Überprüfung, ob überhaupt genug Zeilen vorhanden sind (falls benötigt, reiche ich die später nach).

Grüße
bastla
71590
71590 16.01.2009 um 18:50:27 Uhr
Goto Top
Vielen Dank für die schnellen Antworten, werde ich sofort ausprobieren.
71590
71590 16.01.2009 um 19:01:04 Uhr
Goto Top
Danke, es funktioniert!
Es ist zwar nicht direkt Batch, reicht aber für mich aus.
Könntest du mir das mit der Zeilenüberprüfung bitte noch zeigen? face-wink
42687
42687 16.01.2009 um 21:06:15 Uhr
Goto Top
Hallo, geht es auch, dass eine bestimmte Zeile geändert wird? (Oder soll ich einen neuen Beitrag aufmachen?)

Wenn ich also z.B.:
Zeile1:Schüler1
Zeile2:Schüler2
Zeile3:\\server\Schüler3
Zeile4:Schüler4

So und daraus soll nun die Zeile 3 geändert werden.
Wie geht das? Ich dachte, es müsste nur eine kleine Veränderung in der Batch gemacht werden.
Danke.
bastla
bastla 16.01.2009 um 22:13:20 Uhr
Goto Top
Hallo Exterminator!

Die Prüfung des Vorhandenseins der Datei (und, falls auch dies noch nötig sein sollte, eine zusätzliche Überprüfung auf eine Dateigröße von 0 Byte), kann durch den Batch erfolgen, die Kontrolle der Zeilenanzahl geht in VBS besser:
@echo off & setlocal
set "Datei=D:\Deine Datei.txt"  
set "Zeilen=25"  

if not exist "%Datei%" (echo "%Datei%" wurde nicht gefunden! & pause & goto :eof)  

Set R=%temp%\Reduce.vbs
> %R% echo Set fso=CreateObject("Scripting.FileSystemObject"):F="%Datei%":T=Split(fso.OpenTextFile(F).ReadAll,vbCrLF)  
>>%R% echo U=UBound(T):Von=U-%Zeilen%+1:If U^<1 Then WScript.Quit:Else:If Von^<0 Then:Von=0:End If
>>%R% echo Set O=fso.CreateTextFile(F,True):For i=Von To U-1:O.WriteLine T(i):Next:O.Write T(U):O.Close
cscript //nologo %R%
Grüße
bastla
bastla
bastla 16.01.2009 um 22:55:01 Uhr
Goto Top
Hallo Peter161!
soll ich einen neuen Beitrag aufmachen?
Ja, tu das bitte - dort ist dann auch Platz genug, um zu erklären, warum gerade die Zeile 3 geändert werden soll, und welche Art von Änderung gewünscht wäre ...

Grüße
bastla
71590
71590 16.01.2009 um 23:46:15 Uhr
Goto Top
Sieht aus, als würde es super funktionieren.
1000 Dank!