In vielen Textfiles bestimmte Zeile kopieren, verändern und doppelt an den Anfang stellen
Hallo zusammen,
bei einer Datenmigration habe ich ca. 2000 Textfiles, die ich für den Import bearbeiten muß nach folgendem Muster: Eine Zeile innerhalb der Datei mit "date: " am Anfang muß kopiert werden und dann mit "date1: " die erste und zweite Zeile der Datei darstellen. Also:
vorher:
(...)
date Sun, 25.08.13
(...)
nachher:
date1: Sun, 25.08.13
date1: Sun, 25.08.13
(...)
date: Sun, 25.08.13
(...)
Die Zeile "date" ist immer in einer unterschiedlichen Zeile, aber nur einmal innerhalb einer Datei.
Mit den beantworteten Fragen in dem Forum habe ich es bis zu:
date1: date1:
(...)
date: Sun, 25.08.13
(...)
gebracht. Da ich aber keine Batch oder VB Kenntnisse habe, komme ich jetzt nicht weiter.
Könnt Ihr mir bitte helfen ?
Danke
Andreas
bei einer Datenmigration habe ich ca. 2000 Textfiles, die ich für den Import bearbeiten muß nach folgendem Muster: Eine Zeile innerhalb der Datei mit "date: " am Anfang muß kopiert werden und dann mit "date1: " die erste und zweite Zeile der Datei darstellen. Also:
vorher:
(...)
date Sun, 25.08.13
(...)
nachher:
date1: Sun, 25.08.13
date1: Sun, 25.08.13
(...)
date: Sun, 25.08.13
(...)
Die Zeile "date" ist immer in einer unterschiedlichen Zeile, aber nur einmal innerhalb einer Datei.
Mit den beantworteten Fragen in dem Forum habe ich es bis zu:
date1: date1:
(...)
date: Sun, 25.08.13
(...)
gebracht. Da ich aber keine Batch oder VB Kenntnisse habe, komme ich jetzt nicht weiter.
Könnt Ihr mir bitte helfen ?
Danke
Andreas
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 215176
Url: https://administrator.de/contentid/215176
Ausgedruckt am: 22.11.2024 um 19:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo Andreas72 und willkommen im Forum!
Das könnte etwa so gehen:
Bitte zunächst nur auf Testdaten loslassen ...
Grüße
bastla
Das könnte etwa so gehen:
@echo off & setlocal
set "Ordner=D:\Dein Ordner"
set "Suche=date"
set "T=%temp%\tmp.txt"
for /f "delims=" %%i in ('dir /b/a-d "%Ordner%\*.txt"') do call :ProcessFile "%Ordner%\%%i"
del "%T%"
goto :eof
:ProcessFile
set "Zeile="
for /f "delims=" %%a in ('findstr /ib "%Suche%" %1') do set "Zeile=%%a"
if not defined Zeile (
echo "%Suche%" in Datei %1 nicht gefunden
goto :eof
)
move %1 "%T%"
>%1 echo(%Zeile%
>>%1 echo(%Zeile%
>>%1 type "%T%"
goto :eof
Grüße
bastla
Hallo Andreas72!
Wenn sich nach dem "date" am Zeilenanfang ein Leerzeichen befinden sollte, wäre das ganz einfach so zu lösen:
Zeile 12
Zeile 18 (Zeile 19 analog):
Ansonsten kannst Du in der Variablen %Zeile% "date" so durch "Datum" ersetzen (allerdings bei mehrfachem Auftreten dann jedes Vorkommen):
Grüße
bastla
Wenn sich nach dem "date" am Zeilenanfang ein Leerzeichen befinden sollte, wäre das ganz einfach so zu lösen:
Zeile 12
for /f "tokens=1*" %%a in ('findstr /ib "%Suche%" %1') do set "Zeile=%%b"
>%1 echo Datum: %Zeile%
set "Zeile=%Zeile:date=Datum%"
Zusatzfrage: Welche Funktion hat die offene Klammer in den Zeilen 18 und 19 ? Ohne diese lief es auch
Die Klammer (könnte auch zB "." oder "\" sein) nach dem "echo
" stammt noch aus einem ersten Ansatz und hatte nur den Zweck, die Ausgabe einer Leerzeile zu ermöglichen, falls die gesuchte Zeile nicht gefunden worden wäre - sie schadet zwar weiterhin nicht, kann aber, wenn ohnehin sichergestellt ist, dass es die "date"-Zeile in der Datei gibt, genauso wie die Zeilen 11 und 13 - 16 entfallen ...Grüße
bastla