71590
Goto Top

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!

Content-Key: 106281

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

Printed on: April 25, 2024 at 07:04 o'clock

Mitglied: 60730
60730 Jan 16, 2009, updated at Oct 18, 2012 at 16:37:37 (UTC)
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ß
Member: bastla
bastla Jan 16, 2009 at 17:42:46 (UTC)
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
Mitglied: 71590
71590 Jan 16, 2009 at 17:50:27 (UTC)
Goto Top
Vielen Dank für die schnellen Antworten, werde ich sofort ausprobieren.
Mitglied: 71590
71590 Jan 16, 2009 at 18:01:04 (UTC)
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
Mitglied: 42687
42687 Jan 16, 2009 at 20:06:15 (UTC)
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.
Member: bastla
bastla Jan 16, 2009 at 21:13:20 (UTC)
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
Member: bastla
bastla Jan 16, 2009 at 21:55:01 (UTC)
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
Mitglied: 71590
71590 Jan 16, 2009 at 22:46:15 (UTC)
Goto Top
Sieht aus, als würde es super funktionieren.
1000 Dank!