Batch Anzahl der Zeichen in einer Textdatei
Hallo,
bin absoluter Script Anfänger und suche in einem Fall nach einer Möglichkeit Zeichen in Textdatei zu zählen. Sollten es mehr als 10 Zeichen sein dann soll die Textdatei umbenannt werden. Die Textdateien befinden sich alle im selben Ordner.
Ich finde zwar Lösungen für die Auswertung der Zeilen in einer Textdatei (findstr) aber die beziehen sich meist auf einer einzigen Datei und auf Zeilen.
Danke vorab für alle Unterstützungen
Grüße
kileo
bin absoluter Script Anfänger und suche in einem Fall nach einer Möglichkeit Zeichen in Textdatei zu zählen. Sollten es mehr als 10 Zeichen sein dann soll die Textdatei umbenannt werden. Die Textdateien befinden sich alle im selben Ordner.
Ich finde zwar Lösungen für die Auswertung der Zeilen in einer Textdatei (findstr) aber die beziehen sich meist auf einer einzigen Datei und auf Zeilen.
Danke vorab für alle Unterstützungen
Grüße
kileo
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 606475
Url: https://administrator.de/forum/batch-anzahl-der-zeichen-in-einer-textdatei-606475.html
Ausgedruckt am: 08.04.2025 um 09:04 Uhr
11 Kommentare
Neuester Kommentar
Zeichen in Textdatei zu zählen
Was sind bei dir Zeichen? Gehen wir mal von ASCII oder ANSI SBCS codierten Dateien aus, dann ist die Größe der Datei gleich der Anzahl der Zeichen.for %%i in ("test.txt") do echo %%~zi
ABER: Textdateien sind nicht gleich Textdateien.
Für UTF-8 codierte Dateien gilt das nicht, da hier ein Zeichen aus bis zu 4 Bytes besteht. Ebenso wenig für UTF-16, wo ein Zeichen aus 2 oder 4 Bytes besteht. Über DBCS Codierungen oder UTF-7 rede ich lieber gar nicht erst. Worauf ich hinaus will - mit Batch lässt sich das nicht zuverlässig ermitteln. Sicher kann man ein entsprechendes Tool in einer anderen Sprache schreiben. Aber damit das einigermaßen zuverlässig funktioniert, müsste man auch einem solchen Programm die erwartete Codierung der Datei mitgeben, ebenso ob Byte Order Marks oder Zeilenumbrüche mitgezählt werden sollen usw.
Grüße
Steffen
du machst es ja auch falsch. Du kannst nicht einfach den Befehl nehmen und aus dem Dateinamen eine Variable machen. Mein Tipp (und ich schreibe hier bewusst nicht den Code rein, damit du was lernst ist folgenden vorgehen.
1. Frage ab, welche Textdatei im Ordner sind mittels get-childitem
2. Für jedes gefunden Item führst du nun die bereits bekannte for-Schleife aus, in Abhängigkeit zum Namen aus dem get-Child
Denkanstoß.
$files=get-chidlitem
foreach ($f in files)
{
for %%i in ($f) do echo %%~zi
}
Du musst jetzt noch das get-chilitems anpassen, damit du auch nur den Dateinamen bekommst und ggf. mit "-rename" noch das eine oder andere Steuerzeichen entfernen, aber vom Prinzip her sollte es dir weiterhelfen.
Hmpf… ungetestet vermutlich so:
Dass du bei einem weiteren Lauf dann auch Dateien à la foo.leer.leer.txt bekommst, sollte selbsterklärend sein. Bin mir auch nicht sicher inwiefern du verstanden hast, was ich oben geschrieben habe. %%~zi ist die Dateigröße in Bytes. Das hat ggf. nichts mit der Anzahl Zeichen zu tun und schon gleich überhaupt nichts, wenn du nur von Buchstaben und Zahlen ausgehst.
Steffen
for /f "delims=" %%i in ('dir /a-d /b *.txt') do if %%~zi lss 10 ren "%%~i" "%%~ni.leer%%~xi"
Steffen

Nimm gleich die Powershell
Kannst du auch in ne Batch pressen wenn du willst
ls 'd:\ordner' -File -Filter *.txt | ?{(gc $_.Fullname -raw).Count -gt 10} | rename-item -Newname {$_.Basename + "_leer" + $_.Extension}
Powershell -EP ByPass -C "ls 'd:\ordner' -File -Filter *.txt | ?{(gc $_.Fullname -raw).Count -gt 10} | rename-item -Newname {$_.Basename + '_leer' + $_.Extension}"

Zitat von @Kileo20:
PowerShell meckert über den anfang "ls":
Der Befehl "ls" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Dann ist deine Powershell zu alt, ls ist ein Alias für Get-ChildItem, du kannst aber genauso gut auch dir verwenden, ist auch nur ein Alias dafüt. Meine Befehlsreihen oben wurden natürlich vorher getestet und funktionieren einwandfrei.PowerShell meckert über den anfang "ls":
Der Befehl "ls" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Der Quark den @Doskias oben geschrieben hat wird niemals funktionieren das ist Batch gematsche in Powershell und syntaxmäßig vollkommen falsch.
Zitat von @145916:
Der Quark den @Doskias oben geschrieben hat wird niemals funktionieren das ist Batch gematsche in Powershell und syntaxmäßig vollkommen falsch.
Der Quark den @Doskias oben geschrieben hat wird niemals funktionieren das ist Batch gematsche in Powershell und syntaxmäßig vollkommen falsch.
Deswegen stand da auch Denkanstoß. Aber du hast recht. ich hätte deutlicher schreiben können, sollen und müssen, dass ich damit meinte, dass dort die Hauptarbeit reinkommt.