Aus mehreren .txt Dateien Zeilen bedingt löschen
Ich möchte aus mehreren .TXT Dateien eines Verzeichnisses die ersten 4 Zeilen löschen, wenn eine Bedingung (erstes Wort in der ersten Zeile lautet "Zeitpunkt") erfüllt ist.
Ich habe mir viele verwandte Themen bereits angeschaut aber nichts passendes zur bedingten Abfrage gefunden. Diese ist jedoch wichtig, damit die Dateien nicht doppelt bearbeitet werden können.
Ich habe es mit der folgenden Batch versucht
bei der Ausführung erscheint keine Fehlermeldung aber die Dateien werden auch nicht verändert.
Der "set path" verweist auf die UnixUtils (für "sed" "cat" ...)
Ich habe das gleiche mit einem ShellSkript unter Linux hinbekommen, es muss aber aus Windows heraus aufgerufen werden (per Doppelklick im Explorer)
Es wäre toll, wenn mir jemand auf die Sprünge helfen könnte
Ich habe mir viele verwandte Themen bereits angeschaut aber nichts passendes zur bedingten Abfrage gefunden. Diese ist jedoch wichtig, damit die Dateien nicht doppelt bearbeitet werden können.
Ich habe es mit der folgenden Batch versucht
@echo off
set path=P:utilUnxUtilsusrlocalwbin
FOR %%i IN (*.txt)do (
FOR /F "tokens=1" %%a IN ('sed -n "1p" "%%i"') DO set Wort=%%a
if %Wort% == "Zeitpunkt" then cat "%%i" | sed -e "1,4d" > "%%i".neu | mv "%%i".neu "%%i" )
set path=P:utilUnxUtilsusrlocalwbin
FOR %%i IN (*.txt)do (
FOR /F "tokens=1" %%a IN ('sed -n "1p" "%%i"') DO set Wort=%%a
if %Wort% == "Zeitpunkt" then cat "%%i" | sed -e "1,4d" > "%%i".neu | mv "%%i".neu "%%i" )
bei der Ausführung erscheint keine Fehlermeldung aber die Dateien werden auch nicht verändert.
Der "set path" verweist auf die UnixUtils (für "sed" "cat" ...)
Ich habe das gleiche mit einem ShellSkript unter Linux hinbekommen, es muss aber aus Windows heraus aufgerufen werden (per Doppelklick im Explorer)
#!/bin/sh
#Script zum Löschen der ersten 4 Zeilen aus den Textdateien im Verzeichnis,
#wenn die erste Zeile das Wort "Zeitpunkt" enthält.
#Wichtig: Das Script muss im gleiche Verzeichnis liegen, in dem auch
#die zu beabeitenden Textdateien sind.
for i in ./*.txt;
do
if [ "$(sed -n '1p' "$i" | awk '{print $1}')" = "Zeitpunkt" ]; then
cat "$i" | sed -e '1,4d' > "$i".neu;
mv "$i".neu "$i";
fi
done
#Script zum Löschen der ersten 4 Zeilen aus den Textdateien im Verzeichnis,
#wenn die erste Zeile das Wort "Zeitpunkt" enthält.
#Wichtig: Das Script muss im gleiche Verzeichnis liegen, in dem auch
#die zu beabeitenden Textdateien sind.
for i in ./*.txt;
do
if [ "$(sed -n '1p' "$i" | awk '{print $1}')" = "Zeitpunkt" ]; then
cat "$i" | sed -e '1,4d' > "$i".neu;
mv "$i".neu "$i";
fi
done
Es wäre toll, wenn mir jemand auf die Sprünge helfen könnte
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 155337
Url: https://administrator.de/forum/aus-mehreren-txt-dateien-zeilen-bedingt-loeschen-155337.html
Ausgedruckt am: 24.04.2025 um 14:04 Uhr
2 Kommentare
Neuester Kommentar
Hallo Vully64!
Ungetestet (und nur mit Bordmitteln) etwa so:
Solange die vorletzte Zeile nicht durch das Entfernen der Kommentarzeichen "::" aktiviert wird, bleibt die jeweilige Originaldatei im Verzeichnis %temp% als Sicherungskopie erhalten - bitte trotzdem zunächst mit Kopien testen ...
Grüße
bastla
Ungetestet (und nur mit Bordmitteln) etwa so:
@echo off & setlocal
set "Verz=D:Dein Verzeichnis"
set "Krit=Zeitpunkt"
pushd "%Verz%"
for /f "delims=" %%i in ('dir /b /a-d *.txt') do call :ProcessFile "%%i"
popd
goto :eof
:ProcessFile
set /p Zeile1=<%1
echo "%Zeile1%"|findstr /b """%Krit%">nul || goto :eof
set "Bak=%temp%\%~1"
move %1 "%Bak%"
more +4 "%Bak%">%1
::del "%Bak%"
goto :eof
Grüße
bastla