Maximale Größe zu verarbeitender txt-Dateien mit Batch
Hallo zusammen,
ich habe vor einigen Tagen begonnen mich in Batch einzuarbeiten und bin ein Neuling hier. Mein Ziel ist es ein Programm zu schreiben welches Textdateien nach meinen Wünschen manipuliert. Das habe ich auch nach relativ kurzer Zeit hinbekommen, jedoch funktioniert das Programm nur für "kleine" Textdateien. Sobald ich es auf größere anwenden möchte (>3.000.000 Zeilen), funktioniert es nicht. Den Programmteil an dem es scheitert habe ich auch schon ausmachen können. Hier mal eine vereinfachte FOR-Schleife bei der das Problem genauso Auftritt.
Dieses kleine Programm würde Zeile für Zeile den Inhalt aus "Textdokument.txt" in "test.txt" schreiben. Funktioniert ohne Probleme für ein kleines Textdokument, jedoch nicht für ein großes.
Kennt ihr die Ursache des Problems?
Ich vermute auch, dass Batch ziemlich langsam sein wird wenn es über 3 Mio. Zeilen durchlaufen soll. Liegt das am Code oder an der Sprache selber?
Ich muss die Textdatei sowohl kopieren als auch manipulieren, kennt ihr einen anderen Weg als die Datei Zeile für Zeile zu durchlaufen?
An dieser Stelle sei nochmals erwähnt, dass ich normalerweise nicht programmiere und ich im Großen und Ganzen keine Programmiersprache beherrsche.
Vielen Dank vorab und beste Grüße!
ich habe vor einigen Tagen begonnen mich in Batch einzuarbeiten und bin ein Neuling hier. Mein Ziel ist es ein Programm zu schreiben welches Textdateien nach meinen Wünschen manipuliert. Das habe ich auch nach relativ kurzer Zeit hinbekommen, jedoch funktioniert das Programm nur für "kleine" Textdateien. Sobald ich es auf größere anwenden möchte (>3.000.000 Zeilen), funktioniert es nicht. Den Programmteil an dem es scheitert habe ich auch schon ausmachen können. Hier mal eine vereinfachte FOR-Schleife bei der das Problem genauso Auftritt.
@echo on
SETLOCAL enabledelayedexpansion
FOR /f "delims=" %%i IN ('findstr . Textdokument.txt') DO (
ECHO %%i>>test.txt
)
PAUSE
Dieses kleine Programm würde Zeile für Zeile den Inhalt aus "Textdokument.txt" in "test.txt" schreiben. Funktioniert ohne Probleme für ein kleines Textdokument, jedoch nicht für ein großes.
Kennt ihr die Ursache des Problems?
Ich vermute auch, dass Batch ziemlich langsam sein wird wenn es über 3 Mio. Zeilen durchlaufen soll. Liegt das am Code oder an der Sprache selber?
Ich muss die Textdatei sowohl kopieren als auch manipulieren, kennt ihr einen anderen Weg als die Datei Zeile für Zeile zu durchlaufen?
An dieser Stelle sei nochmals erwähnt, dass ich normalerweise nicht programmiere und ich im Großen und Ganzen keine Programmiersprache beherrsche.
Vielen Dank vorab und beste Grüße!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 329609
Url: https://administrator.de/forum/maximale-groesse-zu-verarbeitender-txt-dateien-mit-batch-329609.html
Ausgedruckt am: 05.05.2025 um 17:05 Uhr
5 Kommentare
Neuester Kommentar
Zitat von @Muck1303:
Hallo zusammen,
Dieses kleine Programm würde Zeile für Zeile den Inhalt aus "Textdokument.txt" in "test.txt" schreiben. Funktioniert ohne Probleme für ein kleines Textdokument, jedoch nicht für ein großes.
Hallo zusammen,
Dieses kleine Programm würde Zeile für Zeile den Inhalt aus "Textdokument.txt" in "test.txt" schreiben. Funktioniert ohne Probleme für ein kleines Textdokument, jedoch nicht für ein großes.
Was heißt funktioniert nicht? Läuft es gar nicht ert los oder bekomst du keine Rückmeldung? Gibt es eine Fehlermeldung?
Ich vermute auch, dass Batch ziemlich langsam sein wird wenn es über 3 Mio. Zeilen durchlaufen soll. Liegt das am Code oder an der Sprache selber?
Am Umfang der Datei.
Ich muss die Textdatei sowohl kopieren als auch manipulieren, kennt ihr einen anderen Weg als die Datei Zeile für Zeile zu durchlaufen?
Was muß tDu denn genau machen? Texte Ersetzen? Teile daraus extrahieren?
Ich würde Dir auf jeden Fall zu Powershel oder zu bash/gnu-utilities statt CMD-Batch raten.
Beipiel für das Ersetzen:
sed "s/zu-ersetztender-Ausdruck/ersatz/g" quelldatei >zieldatei
An dieser Stelle sei nochmals erwähnt, dass ich normalerweise nicht programmiere und ich im Großen und Ganzen keine Programmiersprache beherrsche.
Dann solltest Du Dich erstmal mit den Grundlagen beschäftigen.
lks
Zitat von @Muck1303:
Hallo Lks,
danke für deine schnelle Antwort.
Das Programm läuft an und stoppt dann sobald es an einer solchen FOR-Schleife ist. Keine Fehlermeldung, auch kein Abbruch, aber es läuft nicht weiter.
Hallo Lks,
danke für deine schnelle Antwort.
Zitat von @Lochkartenstanzer:
Was heißt funktioniert nicht? Läuft es gar nicht ert los oder bekomst du keine Rückmeldung? Gibt es eine Fehlermeldung?
Was heißt funktioniert nicht? Läuft es gar nicht ert los oder bekomst du keine Rückmeldung? Gibt es eine Fehlermeldung?
Das Programm läuft an und stoppt dann sobald es an einer solchen FOR-Schleife ist. Keine Fehlermeldung, auch kein Abbruch, aber es läuft nicht weiter.
Bist Du sicher, daß es nicht weiterläuft? Ich vermute eher, daß es einfach in der Schleife hängt und Du den Eindruck hast, es tut sich nichts. Ändere mal die For-Schleife:
@echo on
SETLOCAL enabledelayedexpansion
FOR /f "delims=" %%i IN ('findstr . Textdokument.txt') DO (
ECHO %%i
)
PAUSE
Dann siehst Du, ob das skript weiterläuft oder hängt.
lks
PS: Das Forum bietet auch Code-Tags.

Zitat von @Muck1303:
Ich möchte die Datei kopieren, jedoch Parameter darin ändern. Zum Beispiel: Irgendwo im Text steht in genau einer Zeile " Parameter 2 4 6". Ich möchte die Zahlen beliebig ändern und den Rest der Datei kopieren. Ich weiß allerdings nicht welche Zahlen bisher hinter "Parameter" stehen und in welcher Zeile "Parameter" steht. "Parameter" ist also mein Signalwort, dass die folgenden Zahlen für mich relevant sind.
Ich möchte die Datei kopieren, jedoch Parameter darin ändern. Zum Beispiel: Irgendwo im Text steht in genau einer Zeile " Parameter 2 4 6". Ich möchte die Zahlen beliebig ändern und den Rest der Datei kopieren. Ich weiß allerdings nicht welche Zahlen bisher hinter "Parameter" stehen und in welcher Zeile "Parameter" steht. "Parameter" ist also mein Signalwort, dass die folgenden Zahlen für mich relevant sind.
Lerne lieber gleich eine ordentliche Sprache.
Für so große Dateien würde ich ebenfalls wie von @Lochkartenstanzer gezeigt sed verwenden welches mit cygwin auch unter Windows seinen Dienst verrichtet.
SED
sed -re 's/Parameter [0-9\ ]+/Parameter X X X/g' datei.txt >datei_neu.txt
(gc 'C:\datei.txt' -Read 1000) -replace 'Parameter [\d\ ]+','Parameter X X X' | set-content 'C:\datei_neu.txt'
Gruß