Leerzeile aus txt-Datei löschen
Leerzeile löschen
Hallo,
mit welchen Patch-Befehl kann ich aus mehreren .txt-Dateien immer die dritte Zeile (Leerzeile)rauslöschen?Oder kann ich es mit einen CMD-Befehl z.Bsp:
for /f %i in ('dir /b *.txt') do findstr /b /v "" %i
Komme leider zu keinen brauchbaren Ergebnis.
Danke
MK
Hallo,
mit welchen Patch-Befehl kann ich aus mehreren .txt-Dateien immer die dritte Zeile (Leerzeile)rauslöschen?Oder kann ich es mit einen CMD-Befehl z.Bsp:
for /f %i in ('dir /b *.txt') do findstr /b /v "" %i
Komme leider zu keinen brauchbaren Ergebnis.
Danke
MK
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 33101
Url: https://administrator.de/contentid/33101
Ausgedruckt am: 26.11.2024 um 08:11 Uhr
11 Kommentare
Neuester Kommentar
Hi,
Das Problem mit dieser FOR Schleife ist, dass sie bei einem Auftauchen einer zweiten Leeren Zeile strandet. Da %%i nicht definiert ist und die Schleife nicht initalisiert wird.
Meine Frage ist muss den nur die 4te Leerzeile entfernt werden oder können es alle sein.
Ist zwar nett gemeint, aber bricht sich das Genick.
Gruß Miguel
Das Problem mit dieser FOR Schleife ist, dass sie bei einem Auftauchen einer zweiten Leeren Zeile strandet. Da %%i nicht definiert ist und die Schleife nicht initalisiert wird.
Meine Frage ist muss den nur die 4te Leerzeile entfernt werden oder können es alle sein.
Ist zwar nett gemeint, aber bricht sich das Genick.
Gruß Miguel
Hi,
hiermit sollte es gehen.
Zu deinem Code:
Der erinnert mich an meinen Anfang mit Batch. Da hast Du einiges durcheinander gebracht.
for /F "skip=4 delims=" %%I in ( *.txt ) do ( echo %%I>>*_neu.txt )
1) *.txt ist nicht verarbeitbar für die Schleife, da *.txt kein Befehl ist.
deshalb dir /b *.txt
2) dir /b *.txt liefert Dir einen Dateinamen. Da ist es noch essig mit Schneiden, da könnest Du höchstens etwas aus dem Dateinamen ausschneiden. Für andere Zwecke brauchbar.
Deshalb Übergabe des Dateinamens an die 2 FOR Schleife
3) Mit Findstr und der Prüfung der Zeilenzahl wird das unsaubere Herausspringen aus der FOR Schleife verhindert, wenn es auf eine Leerzeile trifft.
for /f %%a in ('....') DO kann bei einer Leerzeile die Variable %%a nicht setzen.
4) Der Rest mit more sollte klar sein.
5) Delims wird nicht gebraucht, da Du die gesamte Zeile haben willst.Ausser für die Zeilennummer.
Übrigens mein Code kann bestimmt von einem Profibatcher noch weiter eingedampft werden.Und es gibt Tools die die Zeile ohne Probleme löschen können. Zb sed .
Aber das führt jetzt zuweit.
Gutes batch Tutorial unter:
Gruß Miguel
hiermit sollte es gehen.
REM Erstmal Dateien einlesen
REM Aufrufen der Subroutine Sub und übergabe des Dateinamens.
for /f %%a in ('dir /b *.txt') DO call :sub %%a
REM goto End Of File, wenn FOR Schleife durchgelaufen ist
goto :eof
:sub
REM Bis einschließlich Zeile 3 ausgeben. Zeilenzahl wird aus findstr gefischt.
REM findstr /N gibt 1:tertert aus.
REM Deshalb : als Token
for /F "delims=: tokens=1,2" %%a in ('findstr /N . %1') do IF %%a LEQ 3 echo %%b >> neu%1
REM Jetzt geben wir den Rest aus mit more. Ab der 4ten Zeile
REM also erst die 5 usw wird ausgegeben.
more +4 %1 >> neu%1
Zu deinem Code:
Der erinnert mich an meinen Anfang mit Batch. Da hast Du einiges durcheinander gebracht.
for /F "skip=4 delims=" %%I in ( *.txt ) do ( echo %%I>>*_neu.txt )
1) *.txt ist nicht verarbeitbar für die Schleife, da *.txt kein Befehl ist.
deshalb dir /b *.txt
2) dir /b *.txt liefert Dir einen Dateinamen. Da ist es noch essig mit Schneiden, da könnest Du höchstens etwas aus dem Dateinamen ausschneiden. Für andere Zwecke brauchbar.
Deshalb Übergabe des Dateinamens an die 2 FOR Schleife
3) Mit Findstr und der Prüfung der Zeilenzahl wird das unsaubere Herausspringen aus der FOR Schleife verhindert, wenn es auf eine Leerzeile trifft.
for /f %%a in ('....') DO kann bei einer Leerzeile die Variable %%a nicht setzen.
4) Der Rest mit more sollte klar sein.
5) Delims wird nicht gebraucht, da Du die gesamte Zeile haben willst.Ausser für die Zeilennummer.
Übrigens mein Code kann bestimmt von einem Profibatcher noch weiter eingedampft werden.Und es gibt Tools die die Zeile ohne Probleme löschen können. Zb sed .
Aber das führt jetzt zuweit.
Gutes batch Tutorial unter:
Gruß Miguel
Hi,
eine Version ohne Zwischendatei. Die korrogierte Datei wird sofort in einen neuen Ordner erstellt.
Gruß Miguel
eine Version ohne Zwischendatei. Die korrogierte Datei wird sofort in einen neuen Ordner erstellt.
REM Hier geändert
set quellpfad=d:\a\1
set zielpfad=d:\a\2
REM Erstmal Dateien einlesen
REM Aufrufen der Subroutine Sub und übergabe des Dateinamens.
for /f %%a in ('dir /b %quellpfad%\*.txt') DO call :sub %%a
REM goto End Of File, wenn FOR Schleife durchgelaufen ist
goto :eof
:sub
echo %1 >> ert.txt
REM Bis einschließlich Zeile 3 ausgeben. Zeilenzahl wird aus findstr gefischt.
REM findstr /N gibt 1:tertert aus.
REM Deshalb : als Token
REM Ausgabe in den neuen Pfad mit alten Namen
for /F "delims=: tokens=1,2" %%a in ('findstr /N . %quellpfad%\%1') do IF %%a LEQ 3 echo %%b >> %zielpfad%\%~nx1
REM Jetzt geben wir den Rest aus mit more. Ab der 4ten Zeile
REM also erst die 5 usw wird ausgegeben.
REM Aus Quellpfad in den Zielpfad auslesen. Von +4
more +4 %quellpfad%\%1 >> %zielpfad%\%1
Gruß Miguel