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-ID: 391348

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

Ausgedruckt am: 22.11.2024 um 21:11 Uhr

Suddenrage
Suddenrage 31.10.2018 aktualisiert um 22:51:32 Uhr
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.
ashnod
ashnod 01.11.2018 aktualisiert um 07:52:17 Uhr
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
Suddenrage
Suddenrage 01.11.2018 um 11:34:24 Uhr
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.
ashnod
ashnod 01.11.2018 um 12:06:35 Uhr
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
ashnod
ashnod 01.11.2018 um 12:53:58 Uhr
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
rubberman
Lösung rubberman 01.11.2018 um 18:05:36 Uhr
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
Suddenrage
Suddenrage 04.11.2018 um 19:21:57 Uhr
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 ?
rubberman
rubberman 04.11.2018 um 20:06:16 Uhr
Goto Top
FOR /R statt der einfachen FOR Schleife.

Steffen