suddenrage
Goto Top

Mit batch die erste Zeile aus txt Dateien löschen

Hallo, ich brauche Hilfe bei einem Problem das ich derzeit habe.
In einem Verzeichnis befinden sich mehrere Textdateien mit gleichem inhaltlichen Aufbau.
Beispiel:
CP00
CP01
CP02
CP03
CP04
CP05
usw.


Nun möchte ich per batch in allen txt Dateien die erste Zeile (Hier im Beispiel CP00) entfernen.
Die Bezeichnung der ersten Zeile ist in allen txt Dateien gleich.

Wie kann ich das am effektivsten lösen ?

Content-Key: 391348

Url: https://administrator.de/contentid/391348

Printed on: April 29, 2024 at 12:04 o'clock

Member: Suddenrage
Suddenrage Oct 31, 2018 updated at 21:51:32 (UTC)
Goto Top
Habe eine Lösung für mein Problem gefunden:

@echo off
for %%i in (*.txt) do (
more +1 "%%i">"%%i.temp"
del "%%i"
)
ren *.temp *.

Es macht was es soll und funktioniert einwandfrei.
Das Problem was sich jedoch jetzt daraus ergibt ist, wenn die bat Datei versehentlich mehrmals angeklickt wird und dabei die darauf folgenden Zeilen gelöscht werden.
Gibt es dafür eine einfache elegante Lösung ?

Überlegung: In der gleichen bat Datei die Funktion schreiben, dass bevor sie die erste Zeile aus allen txt Dateien löscht, alle txt Dateien als Backup in Verzeichnis X sichert. Bzw. einen Ordner im Verzeichnis X anlegt, in welchem alle txt Dateien als Backup gespeichert werden.
Member: ashnod
ashnod Nov 01, 2018 updated at 06:52:17 (UTC)
Goto Top
Moin ....

Kannst am Ende der .bat auch eine dummy.txt anlegen lassen und am Anfang der .bat prüfst du ob die Datei vorhanden ist ....


if exist dummy.txt (
    rem file exists
) else (
    rem file doesn't exist  
)

VG
Member: Suddenrage
Suddenrage Nov 01, 2018 at 10:34:24 (UTC)
Goto Top
Danke für die Idee aber leider funktioniert die Einbindung in die vorherige .bat nicht bei mir.
Bzw. die Verknüpfung aus dem ersten Code und dem von dir geposteten.
Member: ashnod
ashnod Nov 01, 2018 at 11:06:35 (UTC)
Goto Top
Zitat von @Suddenrage:
Bzw. die Verknüpfung aus dem ersten Code und dem von dir geposteten.

Oki, war vorher faul und habe einfach nen Beispiel kopiert face-wink

Diese Beispiel ist getestet und funktioniert bei mir:

@echo off
IF EXIST dummy.txt (
    ECHO Datei existiert
) ELSE (
    ECHO Datei existiert nicht 
)
PAUSE

VG
Member: ashnod
ashnod Nov 01, 2018 at 11:53:58 (UTC)
Goto Top
und noch nen bisserl zum spielen face-wink

Für mich mal wieder nen Rückblick in längst vergessene Batch-Dateien face-wink

@echo off
IF EXIST dummy.txt (
    GOTO VERARBEITEN
) ELSE (
    GOTO ERSTELLEN
)

:VERARBEITEN
ECHO Datei existiert
del dummy.txt
ECHO Datei wurde gelöscht
GOTO END

:ERSTELLEN
ECHO Datei existiert nicht
ECHO. > dummy.txt
ECHO Datei wurde erstellt
GOTO END

:END
PAUSE
Member: rubberman
Solution rubberman Nov 01, 2018 at 17:05:36 (UTC)
Goto Top
Die Bezeichnung der ersten Zeile ist in allen txt Dateien gleich.

wenn die bat Datei versehentlich mehrmals angeklickt wird und dabei die darauf folgenden Zeilen gelöscht werden.

Wenn du die erste Zeile einliest und prüfst ob sie mit dem Vorgabestring (hier Variable search) übereinstimmt, dann könnten selbst geänderte und unveränderte Dateien im selben Verzeichnis liegen, ohne dass das Probleme macht.
@echo off &setlocal
set "search=CP00"  

set "ln1="  
for %%i in (*.txt) do (
  set "fname=%%~i"  
  setlocal EnableDelayedExpansion
  <"!fname!" set /p "ln1="  
  if "!search!"=="!ln1!" (  
    >"!fname!.~tmp" more +1 "!fname!"  
    move /y "!fname!.~tmp" "!fname!"  
  )
  endlocal
)

Steffen
Member: Suddenrage
Suddenrage Nov 04, 2018 at 18:21:57 (UTC)
Goto Top
Danke für eure Hilfe !
Es funktioniert alles einwandfrei.

Gäbe es noch eine möglichkeit in die .bat zu schreiben, dass sie sich auch auf alle Unterordner im Verzeichnis beziehen soll ?
Heißt das alle Ordner im Verzeichnis, welche txt Dateien besitzen, davon betroffen sind ?
Member: rubberman
rubberman Nov 04, 2018 at 19:06:16 (UTC)
Goto Top
FOR /R statt der einfachen FOR Schleife.

Steffen