Brauche ein Script um einfache Textdateien zusammenzufuegen
Folgendes Problem:
möchte Textdatein zusammenfügen und dabei den Inhalt etwas umbenennen - wer wüßte ein Programm das sowas macht .... oder könnte mir mit einem Script hierzu weiterhelfen?
Folgendes Problem:
möchte Textdatein zusammenfügen und dabei den Inhalt etwas umbenennen - wer wüßte ein Programm das sowas macht .... oder könnte mir mit einem Script hierzu weiterhelfen?
Ausgangssituation:
habe Text-Dateien die folgendermaßen aufgebaut sind:
Namen der Dateien:
15060950.stx
15061010.stx
etc.
dabei sind die ersten 4 Zahlen Datum und Uhrzeit 15060950 = 15.06. 09:50 Uhr (also: ddmmhhmm)
der Inhalt der Textdateien sind Pfade zu Dateien:
zb.: Inhalt von Datei 15060950.stx
C:\Daten\Ordner1\datei-1.cat
C:\Daten\Ordner2\datei-2.cat
C:\Daten\Ordner3\datei-3.cat
zb.: Inhalt von DAtei 15061010.stx
C:\Daten\Ordner4\datei-4.cat
C:\Daten\Ordner5\datei-5.cat
C:\Daten\Ordner6\datei-6.cat
nun möchte ich die Dateien und deren Inhalte folgendermaßen zusammenfügen - in eine Datei mit neuem Namen, der alle Dateien mit gleichem Datum von oben zusammenfasst, die Pfade sollen dann chronologisch untereinander geschrieben werden:
neue Name: 150608t1.log (bedeutet: 15.06.08 und zusätzlich die benötigte Ergänzung t1.log )
dabei soll die neue Datei so aufgebaut sein:
die Uhrzeit soll vorangestellt werden und belegt die Position 1-5, danach 4 Leerzeichen, danach ab Position 10 der Dateiname ohne Pfadangabe und ohne Dateiendung:
09:50 datei-1
09:50 datei-2
00:50 datei-3
10:10 datei-4
10:10 datei-5
10:10 datei-6
etc.
... dieser Vorgang sollte automatisch laufen / oder wir manuell angestoßen und sodass man die täglich anfallenden Einzeldateien zu einer Tagesatei zusammenfasst / wünschenswert wäre die Möglichkeit auf Details Zugriff zu haben, wenn man mal wieder etwas ändern mächte ... zb. Pfade etc. (ich denke ein script dessen code ersichtlich ist würde diesen Zugriff bei Bedarf gestatten)
Ein ganz herzliches Dankeschön erstmal für jede Hilfe ... gerne würde ich auch nochmals nähere Beschreibungen telefonisch geben.
Matthias
[Edit Biber] Von "Java" nach "Batch und Shell" verschoben. [/Edit]
möchte Textdatein zusammenfügen und dabei den Inhalt etwas umbenennen - wer wüßte ein Programm das sowas macht .... oder könnte mir mit einem Script hierzu weiterhelfen?
Folgendes Problem:
möchte Textdatein zusammenfügen und dabei den Inhalt etwas umbenennen - wer wüßte ein Programm das sowas macht .... oder könnte mir mit einem Script hierzu weiterhelfen?
Ausgangssituation:
habe Text-Dateien die folgendermaßen aufgebaut sind:
Namen der Dateien:
15060950.stx
15061010.stx
etc.
dabei sind die ersten 4 Zahlen Datum und Uhrzeit 15060950 = 15.06. 09:50 Uhr (also: ddmmhhmm)
der Inhalt der Textdateien sind Pfade zu Dateien:
zb.: Inhalt von Datei 15060950.stx
C:\Daten\Ordner1\datei-1.cat
C:\Daten\Ordner2\datei-2.cat
C:\Daten\Ordner3\datei-3.cat
zb.: Inhalt von DAtei 15061010.stx
C:\Daten\Ordner4\datei-4.cat
C:\Daten\Ordner5\datei-5.cat
C:\Daten\Ordner6\datei-6.cat
nun möchte ich die Dateien und deren Inhalte folgendermaßen zusammenfügen - in eine Datei mit neuem Namen, der alle Dateien mit gleichem Datum von oben zusammenfasst, die Pfade sollen dann chronologisch untereinander geschrieben werden:
neue Name: 150608t1.log (bedeutet: 15.06.08 und zusätzlich die benötigte Ergänzung t1.log )
dabei soll die neue Datei so aufgebaut sein:
die Uhrzeit soll vorangestellt werden und belegt die Position 1-5, danach 4 Leerzeichen, danach ab Position 10 der Dateiname ohne Pfadangabe und ohne Dateiendung:
09:50 datei-1
09:50 datei-2
00:50 datei-3
10:10 datei-4
10:10 datei-5
10:10 datei-6
etc.
... dieser Vorgang sollte automatisch laufen / oder wir manuell angestoßen und sodass man die täglich anfallenden Einzeldateien zu einer Tagesatei zusammenfasst / wünschenswert wäre die Möglichkeit auf Details Zugriff zu haben, wenn man mal wieder etwas ändern mächte ... zb. Pfade etc. (ich denke ein script dessen code ersichtlich ist würde diesen Zugriff bei Bedarf gestatten)
Ein ganz herzliches Dankeschön erstmal für jede Hilfe ... gerne würde ich auch nochmals nähere Beschreibungen telefonisch geben.
Matthias
[Edit Biber] Von "Java" nach "Batch und Shell" verschoben. [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 89894
Url: https://administrator.de/forum/brauche-ein-script-um-einfache-textdateien-zusammenzufuegen-89894.html
Ausgedruckt am: 13.05.2025 um 02:05 Uhr
6 Kommentare
Neuester Kommentar
Hallo concertlive und willkommen im Forum!
Da Du nach einem "Programm oder Script" fragst, könnte ich Dir, obwohl Du den Bereich "Java" gewählt hast, einen Batch anbieten:
Voraussetzung für das Funktionieren ist, dass im Quelldateinamen Tag, Monat, Stunde und Minute immer zweistellig geschrieben sind, da auf dieser Basis im Unterprogramm ":ProcessFile" die Zerlegung des Dateinamens (%~n1) in die einzelnen Bestandteile erfolgt.
Die Angabe des Jahres könnte zwar auch variabel erfolgen, aber da mir die näheren Umstände der Ausführung (Zusammenfassung der Einzeldateien noch am selben Tag, am nächsten Tag, einmal in der Woche / im Monat - wäre übrigens mit dem geposteten Lösungsvorschlag möglich) nicht bekannt sind, wird das Jahr als Konstante festgelegt.
Zu überlegen wäre übrigens auch noch, was mit den Quelldateien geschehen soll, nachdem die Inhalte in die Zieldatei übernommen wurden (in der derzeitigen Fassung wird bei der nächsten Ausführung des Scripts die entsprechende Zieldatei um die Daten der dann - noch - vorhandenen Quelldateien des jeweiligen Tages ergänzt), bzw, ob die Zieldatei bei jedem Start des Scripts neu (aus allen dann vorhandenen Quelldateien) erstellt werden soll - dann könnten die Quelldateien auch unverändert erhalten bleiben.
Grüße
bastla
Da Du nach einem "Programm oder Script" fragst, könnte ich Dir, obwohl Du den Bereich "Java" gewählt hast, einen Batch anbieten:
@echo off & setlocal
set "Quelle=D:\Ordner mit stx-Dateien"
set "QTyp=stx"
set "Ziel=D:\Ordner mit log-Dateien"
set "ZTyp=t1.log"
set Jahr=08
if not exist "%Ziel%" md "%Ziel%"
for /f "delims=" %%i in ('dir /b /on "%Quelle%\*.%QTyp%"') do call :ProcessFile "%Quelle%\%%i"
goto :eof
:ProcessFile
set "Name=%~n1"
set "Tag=%Name:~,4%
set "Std=%Name:~4,2%
set "Min=%Name:~6,2%
for /f "usebackq delims=" %%d in (%1) do (echo %Std%:%Min% %%~nd)>>"%Ziel%\%Tag%%Jahr%%ZTyp%"
goto :eof
Die Angabe des Jahres könnte zwar auch variabel erfolgen, aber da mir die näheren Umstände der Ausführung (Zusammenfassung der Einzeldateien noch am selben Tag, am nächsten Tag, einmal in der Woche / im Monat - wäre übrigens mit dem geposteten Lösungsvorschlag möglich) nicht bekannt sind, wird das Jahr als Konstante festgelegt.
Zu überlegen wäre übrigens auch noch, was mit den Quelldateien geschehen soll, nachdem die Inhalte in die Zieldatei übernommen wurden (in der derzeitigen Fassung wird bei der nächsten Ausführung des Scripts die entsprechende Zieldatei um die Daten der dann - noch - vorhandenen Quelldateien des jeweiligen Tages ergänzt), bzw, ob die Zieldatei bei jedem Start des Scripts neu (aus allen dann vorhandenen Quelldateien) erstellt werden soll - dann könnten die Quelldateien auch unverändert erhalten bleiben.
Grüße
bastla
Hallo concertlive!
Anstelle nur des Namens ("%%~nd") wird mit "%%~dpnd" auch "drive" und "path" mit ausgegeben (und die neue Endung hinzugefügt).
Falls Du das Umbenennen testen möchtest, füge nach Zeile 17 noch hinzu:
Grüße
bastla
wie würde es aussehen wenn das sceipt an der stelle 10 in der zieldatei doch den ganzen pfad der datei schreibt, bloß die dateiendung .cat in die endung .dxx austauscht?
Die Zeile 17 würde sich ändern auffor /f "usebackq delims=" %%d in (%1) do (echo %Std%:%Min% %%~dpnd.dxx)>>"%Ziel%\%Tag%%Jahr%%ZTyp%"
alte quelldateien lösche ich von zeit zu zeit weg ... und dass das script über die neuen (sprich zukünftigen) immer wieder drübergeht ist OK ... es könnten sich ja daten verändert haben oder neue quelldaten zu anderen zeiten pro tag hinzugekommen sein ....
Wenn die bereits übernommenen Dateien beim nächsten Start des Scripts noch vorhanden sind, wirst Du deren Inhalte doppelt in der Zieldatei vorfinden - insofern wäre es vielleicht sinnvoll, die ".stx"-Dateien zb durch das Hinzufügen eines ".done" an den Dateinamen als "verarbeitet" zu kennzeichnen, ohne sie sofort löschen oder verschieben zu müssen - soferne eine bereits erstellte ".stx"-Datei nachträglich nicht nochmals (durch das erstellende Programm) verändert wird, wäre dies ein gangbarer Weg.Falls Du das Umbenennen testen möchtest, füge nach Zeile 17 noch hinzu:
ren %1 "%~1.done">nul
bastla
Hallo concertlive!
Nochmals als vollständige Version:
Umbenennen sollte jetzt auch klappen (hatte vorher beim neuen Dateinamen noch den Pfad dabei, jetzt wird nur noch Name und Extension sowie der Zusatz ".done" verwendet), und wenn Du tatsächlich löschen willst, kannst Du anstelle der "ren"-Zeile (18) die "del"-Zeile (19) verwenden - mit "::" am Beginn der Zeile wird diese auskommentiert, sodass Du die Doppelpunkte nur in die jeweils nicht benötigte Zeile setzen musst.
Grüße
bastla
Nochmals als vollständige Version:
@echo off & setlocal
set "Quelle=D:\Ordner mit stx-Dateien"
set "QTyp=stx"
set "Ziel=D:\Ordner mit log-Dateien"
set "ZTyp=t1.log"
set Jahr=08
if not exist "%Ziel%" md "%Ziel%"
for /f "delims=" %%i in ('dir /b /on "%Quelle%\*.%QTyp%" 2^>nul') do call :ProcessFile "%Quelle%\%%i"
goto :eof
:ProcessFile
set "Name=%~n1"
set "Tag=%Name:~,4%
set "Std=%Name:~4,2%
set "Min=%Name:~6,2%
for /f "usebackq delims=" %%d in (%1) do (echo %Std%:%Min% %%~dpnd.dxx)>>"%Ziel%\%Tag%%Jahr%%ZTyp%"
ren %1 "%~nx1.done"
::del %1
goto :eof
Grüße
bastla