cynix

Batch zum löschen von text dateien x kleinergleich y zeilen

Hallo ich würde gerne wissen wenn ich in einem Ordner mehrere txt dateien habe sozusagen jede zeile (also laut batch delims) zähle und dass auch separat mit jeder txt datei. Wenn er zur nächsten(txt) geht den zählwert wieder auf 0 zurücksetzt, und bevor er zurücksetzt prüft wenn z.B.
 %%i <= 2 (%%i zeilenanzahl von aktueller *.txt)
soll die gerade gezählte txt datei gelöscht werden (nicht nur die zeilen).

ich habe folgenden ansatz gefunden komme aber trotzdem nicht ganz weiter:

batch zeilen einer txt zählen und als variable speichern.

schon wenn ich bei dem beispiel die
 blabla.txt mit *.txt 
ersetze meckert cmd herum das irgendwas mit der syntax nicht sitmmt.

Würde mich über Antworten freuen. Es geht um unnötige logs die keinen wirklichen inhalt haben bis auf meta infos die mich nicht interresieren und eben mit 2 zeilen meine workstation zumüllen. dann gibt es aber auch welche mit 3 zeilen was man ja an der KB zahl nicht sehen kann und die zeilenzeichenlänge können evtl auch abweichen.

mfg Cynix
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 188550

Url: https://administrator.de/forum/batch-zum-loeschen-von-text-dateien-x-kleinergleich-y-zeilen-188550.html

Ausgedruckt am: 15.05.2025 um 21:05 Uhr

Sheogorath
Sheogorath 25.07.2012 um 09:53:46 Uhr
Goto Top
Halloechen,

Nun, die loesung war schon fast da, ich habe etwas den syntax angepasst, und schon konnte es losgehen. Ich habe imprinzip jetzt alles kommplett... nurnoch limit setzten (anzahl der zeilen, die die datei haben soll) und du kannst starten

@echo off
:config
SET Limit=20


:main
FOR /R %%I IN (*.txt) DO set "datei=%%I" && call :lines_count  
goto finish




:Lines_count
FOR /F "delims=:" %%V IN ('findstr /N .* "%datei%"') DO set zeilen=%%V && call :delete  
goto :eof

:delete
IF %Zeilen% LSS %limit% del "%datei%"  
goto :eof





:finish
exit

Viel Spass

Gruss
Chris
bastla
bastla 25.07.2012 um 12:27:37 Uhr
Goto Top
... wobei vielleicht noch anzumerken wäre, dass mit "FOR /R" auch Dateien in Unterordnern erfasst werden ...

Grüße
bastla
pieh-ejdsch
pieh-ejdsch 25.07.2012 aktualisiert um 15:34:03 Uhr
Goto Top
moin,

warum macht Ihr immer sowas Ellenlanges?

Test in der CMD-Line:
for %i in (D:\Log\*.log) do @find /c /v "" <%i |findstr /rxc:"." /c:"[123]." &&echo del "%~i"  

Löscht alle Logdateien mit weniger als 40 Zeilen.

Gruß Phil
cynix
cynix 25.07.2012 um 15:48:12 Uhr
Goto Top
Hey leute danke für eure hilfe die 2. Lösung versteh ich allerdings nicht ganz ? wo zählt er da bis 40 ? bzw.
Bei der ersten lösung versteh ich es so dass x <= limit (also 20) / oder ist x < limit mit lss gemeint ?
pieh-ejdsch
pieh-ejdsch 25.07.2012 aktualisiert um 16:16:34 Uhr
Goto Top
moin cynix,

FIND gibt einfach nur die Zeilenanzahl aus, wenn die Datei als EingabeUmleitung erfolgt.
FINDSTR sucht nach /regulären Ausdrücken auf der ganzen /x Zeile.
Damit nach mehreren Werten gesucht werden kann (größer als 9) benutzt Du /c:"Zeichenfolge".

Ein Punkt alleine entspräche hier auch /C:"[0-9]" als regulärer Ausdruck.
Und bei Werten über den Einer Hinaus ist der reguläre Ausdruck für jeden Einzelnen Zehner bis 5x
findstr /rxc:"." "1." /c:"2." /c:"3." /c:"4." /c:"5."

oder auch
findstr /rxc:"." /c:"[1-5]."
jede Suche /c:"Wert" entspricht einem OR

Die CMD-Zeile muss zwar erstmal geschrieben werden, aber ist bei richtiger Anwendung auch schneller Fertig.

Mehr dazu unter Findstr /?

Gruß Phil
bastla
bastla 25.07.2012 aktualisiert um 19:05:43 Uhr
Goto Top
... oder anders formuliert:
findstr /rxc:"." /c:"[1-5]."
findet alle Strings (= die ganze von "find /c" gelieferte Zeilenanzahl), die nur aus einem Zeichen oder aus zwei Zeichen, von denen das erste im Bereich der Ziffern 1 bis 5 liegt und das zweite egal ist, bestehen - daher würden damit alle Zahlenwerte von 0 bis 59 gefunden (wenn's nur von 0 bis 39 gehen soll, eben, wie oben "[1-3].") - damit nicht auch zB "155" gefunden wird, gibt "/x" vor, dass die Übereinstimmung für die gesamte Zeile (= Zahl) zu gelten hat.

Grüße
bastla
Sheogorath
Sheogorath 26.07.2012 um 08:41:39 Uhr
Goto Top
Hallo cynix,

Bei meiner Loesung war "x < limit" LSS ist < | <= ist LEQ.

was uebersichtstechnisch, aus meiner Sicht, relativ gut ist, ist
http://de.wikibooks.org/wiki/Batch-Programmierung:_Batch-Befehle
kann man ein bisschen schauen, zumindest fuer kleinere Aufgaben ;)


Gruss
Chris