Per Batch Zeilen in txt datei löschen
Hallo
Mehrer User schreiben per Batch in eine gemeinsame txt datei.
Diese wird wiederrum mit einer anderen Batch datei ausgegeben.
Jz möchte ich, wenn die txt datei zu lange ist (zb über 30 Zeilen) immer die erste/n löschen, damit es nie mehr wie zb. 30 Zeilen sind!
Grüße
Mehrer User schreiben per Batch in eine gemeinsame txt datei.
Diese wird wiederrum mit einer anderen Batch datei ausgegeben.
Jz möchte ich, wenn die txt datei zu lange ist (zb über 30 Zeilen) immer die erste/n löschen, damit es nie mehr wie zb. 30 Zeilen sind!
Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 10.12.2009 um 11:29:59 Uhr
#rgc = 630
Content-ID: 131295
Url: https://administrator.de/contentid/131295
Ausgedruckt am: 25.11.2024 um 11:11 Uhr
8 Kommentare
Neuester Kommentar
hallo,
benutz edlin dazu:
wobei in der Datei 'commd' (Ohne Dateierweiterung!) die commandos stehen. z.B.:
beachte die Leerzeile!
nachteil bei Edlin: du bekommst ein SUB-Sonderzeichen bzw. ein ans ende der Datei gesetzt...
Lässt sich aber mit z.B.
beheben, wobei du dann aber 'ne 2. leerzeile unten dran bekommst
benutz edlin dazu:
edlin lawl.txt<commd
1D
E
nachteil bei Edlin: du bekommst ein SUB-Sonderzeichen bzw. ein ans ende der Datei gesetzt...
Lässt sich aber mit z.B.
Echo. >>lawl.txt
Falls es in VBS sein darf, dann eventuell so:
Gruss
Tsuki
Pfad = "C:\Test.txt"
ZeilenMax = 30
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Zeilen = FSO.OpenTextFile(Pfad,1)
ZeilenEinzel = Split(Zeilen.ReadAll,vbCrLf)
Zeilen.Close
If Ubound(Zeileneinzel) > (ZeilenMax -1) then
For i = Ubound(Zeileneinzel) - 30 to Ubound(Zeileneinzel)
If not i = Ubound(Zeileneinzel) Then
ZeilenNeu = ZeilenNeu & Zeileneinzel(i) & vbCrLf
Else
ZeilenNeu = ZeilenNeu & Zeileneinzel(i)
End If
next
Set Zeilen = FSO.CreateTextFile(Pfad, True)
Zeilen.Write (ZeilenNeu)
Zeilen.Close
End If
Gruss
Tsuki
@5t8d1e
Wenn Leerzeilen unter den Tisch fallen dürfen, würde ich das auch so ähnlich machen - ansonsten:
Da es hier nur um wenige Zeilen zu gehen scheint und "
Grüße
bastla
Wenn Leerzeilen unter den Tisch fallen dürfen, würde ich das auch so ähnlich machen - ansonsten:
@echo off & setlocal
set "File=D:\admin.txt"
set /a Lines=30
set /a Counter=0
set "TmpFile=%temp%\tail.txt"
for /f "delims=:" %%i in ('findstr /n "^" "%File%"') do set Counter=%%i
set /a Latest=Counter-Lines
if %Latest% gtr 0 (
more +%Latest% "%File%">"%TmpFile%"
move "%TmpFile%" "%File%"
)
more +n
", falls ich das richtig im Hinterkopf habe, erst ab 65.536 Zeilen zu zicken beginnt, sollte das eigentlich funktionieren ...Grüße
bastla
@tsuki
Als Alternative zum Vermeiden der Zeilenschaltung nach der letzten Zeile könntest Du auch folgende Vorgangsweise (erspart die Abfrage in jedem Schleifendurchlauf) verwenden:
Grüße
bastla
Als Alternative zum Vermeiden der Zeilenschaltung nach der letzten Zeile könntest Du auch folgende Vorgangsweise (erspart die Abfrage in jedem Schleifendurchlauf) verwenden:
For i = UBound(Zeileneinzel) - 29 to UBound(Zeileneinzel)
ZeilenNeu = ZeilenNeu & vbCrLf & Zeileneinzel(i)
Next
ZeilenNeu = Mid(ZeilenNeu, 3) 'CrLf am Anfang der ersten Zeile entfernen
bastla