Batch: Zeilen in mehreren .txt zählen und Summe in Variable speichern
Hallo & guten Tag!
Ich möchte gerne die Zeilen mehrerer Textdateien zählen und die Summe in einer Variablen speichern.
Für das Zeilenzählen in einer einzelnen Datei benutze ich immer
Wie aber funktioniert das Zählen (und Summieren) der Zeilen über mehrere Dateien hinweg?
Die Anzahl der Dateien, deren Zeilen gezählt und summiert werden sollen, kann unterschiedlich ausfallen.
Der Dateiname ist aber immer nach dem Schema
Datei*.txt
aufgebaut,
also z. B.
Datei1.txt
Datei2.txt
Datei3.txt
...
Hat jemand eine Idee?
Ich möchte gerne die Zeilen mehrerer Textdateien zählen und die Summe in einer Variablen speichern.
Für das Zeilenzählen in einer einzelnen Datei benutze ich immer
for /f "delims=:" %%A in ('findstr /OFF /N .* "Datei.txt"') do set Zeilen=%%A
Wie aber funktioniert das Zählen (und Summieren) der Zeilen über mehrere Dateien hinweg?
Die Anzahl der Dateien, deren Zeilen gezählt und summiert werden sollen, kann unterschiedlich ausfallen.
Der Dateiname ist aber immer nach dem Schema
Datei*.txt
aufgebaut,
also z. B.
Datei1.txt
Datei2.txt
Datei3.txt
...
Hat jemand eine Idee?
7 Antworten
- LÖSUNG Friemler schreibt am 03.02.2016 um 17:47:01 Uhr
- LÖSUNG 114757 schreibt am 03.02.2016 um 18:09:46 Uhr
- LÖSUNG rubberman schreibt am 03.02.2016 um 20:20:10 Uhr
- LÖSUNG alfabravo schreibt am 03.02.2016 um 21:00:27 Uhr
- LÖSUNG Friemler schreibt am 03.02.2016 um 21:07:56 Uhr
- LÖSUNG rubberman schreibt am 03.02.2016 um 21:55:49 Uhr
- LÖSUNG Friemler schreibt am 03.02.2016 um 22:55:04 Uhr
- LÖSUNG rubberman schreibt am 03.02.2016 um 21:55:49 Uhr
LÖSUNG 03.02.2016, aktualisiert um 20:57 Uhr
Hallo alfabravo,
teste mal folgendes:
Falls Du in Zeile 3 als Wert für FileMask einen vollständigen Pfad mit Laufwerksbuchstaben angibst, gibt FINDSTR auch den vollständigen Pfad für jede Datei aus. Da dieser auch einen Doppelpunkt enthält, musst Du dann in Zeile 9 tokens=1,2 durch tokens=2,3 ersetzen.
[EDIT]
Man könnte auch find /c /v "xyz" "*.txt" zur Ausgabe der Zeilenanzahl der Dateien benutzen, allerdings muss dann der Suchstring xyz durch etwas ersetzt werden, was in den Dateien garantiert nicht vorkommt.
[/EDIT]
Gruß
Friemler
teste mal folgendes:
@echo off & setlocal enabledelayedexpansion
set "FileMask=*.txt"
set /a TotalLines=0
set /a LastFileLines=0
set "LastFileName="
for /f "tokens=1,2 delims=:" %%a in ('findstr /rn "^" "%FileMask%" 2^>NUL') do (
if defined LastFileName if "%%a" neq "!LastFileName!" (
set /a TotalLines+=LastFileLines
)
set "LastFileName=%%a"
set /a LastFileLines=%%b
)
set /a TotalLines+=LastFileLines
echo Gesamte Zeilenzahl: %TotalLines%
Falls Du in Zeile 3 als Wert für FileMask einen vollständigen Pfad mit Laufwerksbuchstaben angibst, gibt FINDSTR auch den vollständigen Pfad für jede Datei aus. Da dieser auch einen Doppelpunkt enthält, musst Du dann in Zeile 9 tokens=1,2 durch tokens=2,3 ersetzen.
[EDIT]
Man könnte auch find /c /v "xyz" "*.txt" zur Ausgabe der Zeilenanzahl der Dateien benutzen, allerdings muss dann der Suchstring xyz durch etwas ersetzt werden, was in den Dateien garantiert nicht vorkommt.
[/EDIT]
Gruß
Friemler
LÖSUNG 03.02.2016, aktualisiert um 18:11 Uhr
Oder man nimmt gleich die Powershell, dann reicht ein:

Gruß jodel32
(gc 'C:\Ordner\*.txt').Count
Gruß jodel32
LÖSUNG 03.02.2016, aktualisiert um 20:57 Uhr
Hallo.
Grüße
rubberman
was in den Dateien garantiert nicht vorkommt.
Yepp. Der Trick ist "".@echo off &setlocal
set /a n=0
for %%i in ("Datei*.txt") do for /f %%j in ('type "%%~i"^|find /c /v ""') do set /a n += %%j
echo %n%
pause
Grüße
rubberman
LÖSUNG 03.02.2016 um 21:00 Uhr
Wow, funktioniert! Danke Euch allen für Eure Zeit und die Codes! Große Klasse!
LÖSUNG 03.02.2016 um 21:07 Uhr
Hallo rubberman,
mit diesem Trick gehen einem aber die Leerzeilen durch die Lappen. Wenn die nicht mitgezählt werden sollen kann man das so verwenden, ansonsten nicht.
Gruß
Friemler
mit diesem Trick gehen einem aber die Leerzeilen durch die Lappen. Wenn die nicht mitgezählt werden sollen kann man das so verwenden, ansonsten nicht.
Gruß
Friemler
LÖSUNG 03.02.2016 um 21:55 Uhr
Hey Friemler.
Grüße
rubberman
mit diesem Trick gehen einem aber die Leerzeilen durch die Lappen
Nein, grundsätzlich werden Leerzeilen mitgezählt. Lediglich bei der letzten Zeile wird nicht unterschieden, ob sie mit einem Zeilenumbruch abgeschlossen wurde oder nicht.Grüße
rubberman
LÖSUNG 03.02.2016 um 22:55 Uhr
Hallo rubberman,
hast recht, find /c /v "" findet tatsächlich auch Leerzeilen, Cr+Lf zählen eben auch als Zeileninhalt. Hätte ich doch vorher mal testen sollen...
Gruß
Friemler
hast recht, find /c /v "" findet tatsächlich auch Leerzeilen, Cr+Lf zählen eben auch als Zeileninhalt. Hätte ich doch vorher mal testen sollen...
Gruß
Friemler