gelöst Batch Anzahl der Zeichen in einer Textdatei

Mitglied: Kileo20

Kileo20 (Level 1) - Jetzt verbinden

20.09.2020 um 20:22 Uhr, 505 Aufrufe, 11 Kommentare

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
Mitglied: rubberman
20.09.2020 um 21:12 Uhr
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.
Dabei ist zu beachten, dass auch Zeilenumbrüche Zeichen sind (unter Windows gleich 2 - Carriage Return und Line Feed, auf *nixoiden Systemen nur das Line Feed).

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
Bitte warten ..
Mitglied: Kileo20
20.09.2020 um 22:24 Uhr
Hi Rubberman,

Danke für deine Details.

Mit Zeichen meine ich sowohl Buchstaben und Zahlen.

Dein Vorschlag habe ich noch ausgebaut um alle .txt Dateien in einem Ordner zu prüfen:

for %%i in ("dir /b *.txt") do @set count=%%~zi

Und um dann die Datei mit mehr als 10 „Zeichen“ umschreiben zu lassen nich folgende Zeile im batch hinzugefügt:

If %count% lss 10 in (*.txt) ren „*.txt“ „*.leer.txt“

Hab auch versucht mit der FOR Schleife gleich Die txt umzubenennen wenn die „Zeichen“ weniger als 10 sein sollten indem ich die zweite Zeile IF Weggelassen haben und FOR Schleife um „do rename“ erweitert habe.

Aber leider kriege ich keine Auswertung jeder einzelner txt Datei
Bitte warten ..
Mitglied: Doskias
21.09.2020 um 10:56 Uhr
Zitat von Kileo20:
Aber leider kriege ich keine Auswertung jeder einzelner txt Datei

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ß.
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.
Bitte warten ..
Mitglied: rubberman
LÖSUNG 21.09.2020 um 11:54 Uhr
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
Bitte warten ..
Mitglied: 145916
21.09.2020, aktualisiert um 12:07 Uhr
Nimm gleich die Powershell
Kannst du auch in ne Batch pressen wenn du willst
Bitte warten ..
Mitglied: Kileo20
21.09.2020 um 13:14 Uhr
Supi, Danke, werd ich gleich mal ausprobieren. Dachte mir schon dass Powershell die bessere Lösung sein könnte
Bitte warten ..
Mitglied: Kileo20
21.09.2020 um 21:26 Uhr
PowerShell meckert über den anfang "ls":

Der Befehl "ls" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

Aber die Batchlösung von Steffen funktioniert einwandfrei. Danke trotzdem für deinen Hilfe
Bitte warten ..
Mitglied: Kileo20
21.09.2020 um 21:33 Uhr
Danke Steffen, das ist die Lösung. Ich kannte übrigens die variable %%~zi, hatte bereits einige Variablen aus ss64 und anderen Portalen recherchiert aber irgendwie den Überblick verloren
Bitte warten ..
Mitglied: Kileo20
21.09.2020 um 21:40 Uhr
Hab ein wenig als Vollblut Powershell Anfänger experimentiert und zuletzt an diesem experimentiert gebastelt:

$files=get-chidlitem -path "LW:\ordner\"
foreach ($f in files)
{
for %%i in ($f) do echo %%~zi
}

leider ohne Erfolg.

Ich hab mich für die Batch Lösung von Steffen entschieden, das geht 100%.

Danke auch dir für dein Unterstützung!
Bitte warten ..
Mitglied: 145916
22.09.2020, aktualisiert um 07:13 Uhr
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.

Der Quark den @Doskias oben geschrieben hat wird niemals funktionieren das ist Batch gematsche in Powershell und syntaxmäßig vollkommen falsch.
Bitte warten ..
Mitglied: Doskias
22.09.2020 um 10:57 Uhr
Zitat von 145916:
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.
Bitte warten ..
Heiß diskutierte Inhalte
Router & Routing
Wireguard VPN (oder andere alternative) - Kompletter Traffic routen
gelöst KodaCHFrageRouter & Routing15 Kommentare

Guten Morgen Ich habe bisher mit OpenVPN und mit Wireguard VPN einige Tests gemacht. OpenVPN (Kostenlose Version): Hier habe ...

Server-Hardware
Konfiguration und Stromverbrauch ML350 Gen10
kosta88FrageServer-Hardware13 Kommentare

Hallo, ich versuche mal zu berechnen was ein ML350 verbrauchen würde. Ich weiß dass es von der Konfiguration und ...

Server
Kein Zugriff auf NAS bei DS Lite
martingerdesFrageServer11 Kommentare

Hallo liebe Gemeinde, dieses Thema kennen wahrscheinlich viele und ich selbst habe schon viele Forenbeiträge zu diesem Thema gelesen. ...

Windows Server
Hyper-V Server vs Datacenter?
holliknolliFrageWindows Server10 Kommentare

Hallo, hat jemand Erfahrung mit dem - kostenlosen - Hyper-V-Server? Ich meine, warum teure Lizenzen für Datacenter zahlen, wenn ...

Grafikkarten & Monitore
Grafikkarte kaputt? Hier muss noch etwas hin, weil der andere Titel schon vergeben ist :)
Sir.classicFrageGrafikkarten & Monitore9 Kommentare

Hallo an alle, ich habe einen selbst gebauten PC und mein Problem ist, dass meine Monitore regelmäßig (alle 3h) ...

LAN, WAN, Wireless
Spanning Tree Probleme
predator66FrageLAN, WAN, Wireless9 Kommentare

Hallo, wir haben hier eigenartige Spanningtree Probleme, die wir zur Zeit nicht gelöst bekommen: New Root Port MAC ist ...

Ähnliche Inhalte
Batch & Shell
Textdatei per batch kürzen
gelöst GelaNFrageBatch & Shell5 Kommentare

Hallo Ich hab wie ich dachte ein einfaches Problem. Ich möchte aus einer einfachen Textdatei die ersten 50 Zeilen ...

Batch & Shell
Batch: Textdatei Zeilenweise auslesen
gelöst CreatorXFrageBatch & Shell2 Kommentare

Hallo, ich weiß, zu dem Thema gibt es schon unzählige Threads. Ich hab auch einiges dazu gefunden und trotzdem ...

Batch & Shell

Batch - Textdatei erstellen - Problem mit Leerzeilen

gelöst Phoenix22FrageBatch & Shell6 Kommentare

Hallo :) Habe folgendes Problem. Ich lese eine Textdatei aus, passe ggfs. Zeilen an und erstelle eine neue Datei. ...

Batch & Shell

Batch Textdatei-Fragen-Reihe Frage:5

gelöst IleiesFrageBatch & Shell2 Kommentare

Hallo zusammen, Wie funktioniert es, dass in der Datei test.txt nicht: b1 b2 b3 steht, sondern: b1b2b3

Batch & Shell

Bestimmten Bereich einer Textdatei ausgeben mittels Batch

gelöst Django.DuranoFrageBatch & Shell10 Kommentare

Hallo, gibt es eine Möglichkeit eine Textdatei mittels Batch zu durchsuchen und einen bestimmten Teil davon dann aber nur ...

Batch & Shell

Bestimmte Teile einer Textdatei entfernen mit Batch!

gelöst Booster123FrageBatch & Shell4 Kommentare

Moin Moin liebe community, ich habe folgendes Problem mit einer Textdatei. Der Inhalt sieht wie folgt aus (Ausschnitt): 4;IDK ...

Berechtigungs- und IdentitätsmanagementBerechtigungs- und IdentitätsmanagementWebdienste und -serverWebdienste und -serverDatenbankenDatenbankenMonitoring & SupportMonitoring & SupportHybrid CloudHybrid CloudSmall Business ITSmall Business IT