BATCH-Skript, welches 24 einzelne (Stunden-) Dateien (.csv) zu einer einzelnen (Tages-) Datei zusammenfügt und alle Zeitstempel bzw. Überschriften bis auf die erste entfernt?
Hallo,
Erst einmal tolles Forum hier, schon viel gelesen!
Mich beschäftigt folgende Problemstellung:
Ich muss von einem entfernten PC csv-Dateien herunterladen (habe ich hinbekommen), welche folgendes Format bzw. Namen haben:
TLG_SystemArchive_20130126_000000_-_20130126_010000_MIN.csv
TLG_SystemArchive_20130126_010000_-_20130126_020000_MIN.csv
TLG_SystemArchive_20130126_020000_-_20130126_030000_MIN.csv
usw.
Diese Dateien beinhalten jeweils 1 Stunde Daten also 60 Datensätze im Minutentakt -> 24 Dateien = 1 Tag.
Vor den Daten gibt es immer eine Zeile (bzw. "Überschrift") wie eine Art Zeitstempel.
Date Spalte1 Spalte2 usw.
Daraus werden soll eine "Tagesdatei", wo alle 24 Dateien eines!! Datums zusammengefasst werden sollen (habe ich auch manuell hinbekommen via TYPE).
Problem: Es sollen bis auf den ersten Zeitstempel die restlichen 23 entfernt werden und das anfängliche "Date" in "DATE" ersetzt werden.
Wichtig hierbei ist auch, daß nur Dateien des Tages 20130126 in eine Datei zusammengefasst werden, also nicht die Daten vom z.B. 20130125 mit einfließen.
Hätte jemand eine Idee dazu?
Wäre für jeden Tip dankbar!
Gruß Axel
Erst einmal tolles Forum hier, schon viel gelesen!
Mich beschäftigt folgende Problemstellung:
Ich muss von einem entfernten PC csv-Dateien herunterladen (habe ich hinbekommen), welche folgendes Format bzw. Namen haben:
TLG_SystemArchive_20130126_000000_-_20130126_010000_MIN.csv
TLG_SystemArchive_20130126_010000_-_20130126_020000_MIN.csv
TLG_SystemArchive_20130126_020000_-_20130126_030000_MIN.csv
usw.
Diese Dateien beinhalten jeweils 1 Stunde Daten also 60 Datensätze im Minutentakt -> 24 Dateien = 1 Tag.
Vor den Daten gibt es immer eine Zeile (bzw. "Überschrift") wie eine Art Zeitstempel.
Date Spalte1 Spalte2 usw.
Daraus werden soll eine "Tagesdatei", wo alle 24 Dateien eines!! Datums zusammengefasst werden sollen (habe ich auch manuell hinbekommen via TYPE).
Problem: Es sollen bis auf den ersten Zeitstempel die restlichen 23 entfernt werden und das anfängliche "Date" in "DATE" ersetzt werden.
Wichtig hierbei ist auch, daß nur Dateien des Tages 20130126 in eine Datei zusammengefasst werden, also nicht die Daten vom z.B. 20130125 mit einfließen.
Hätte jemand eine Idee dazu?
Wäre für jeden Tip dankbar!
Gruß Axel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 197922
Url: https://administrator.de/forum/batch-skript-welches-24-einzelne-stunden-dateien-csv-zu-einer-einzelnen-tages-datei-zusammenfuegt-und-alle-197922.html
Ausgedruckt am: 21.04.2025 um 14:04 Uhr
6 Kommentare
Neuester Kommentar
Hallo axfa77 und willkommen im Forum!
Da sich die Kopfzeile ja wohl nicht so häufig ändern dürfte, würde ich diese einfach (mit der gewünschten Änderung ("Date" -> "DATE") in einer Datei "Kopf.txt" speichern und dann etwa so vorgehen (ungetestet):
Grüße
bastla
Da sich die Kopfzeile ja wohl nicht so häufig ändern dürfte, würde ich diese einfach (mit der gewünschten Änderung ("Date" -> "DATE") in einer Datei "Kopf.txt" speichern und dann etwa so vorgehen (ungetestet):
pushd "D:\Ordner mit den CSV-Dateien"
for /f "delims=" %%i in ('dir /b/on TLG_SystemArchive_*.csv') do (
for /f "tokens=3 delims=_" %%a in ("%%i") do (
if not exist "%%a.csv" copy "Kopf.txt" "%%a.csv" >nul
more +1 "%%i">>"%%a.csv"
)
)
popd
bastla
Hallo axfa77!
Wenn das Original der Kopfzeile benötigt wird, dann eher so (weiterhin ungetestet
):
Grüße
bastla
[Edit] Schreibweise "
Wenn das Original der Kopfzeile benötigt wird, dann eher so (weiterhin ungetestet
setlocal enabledelayedexpansion
pushd "D:\Ordner mit den CSV-Dateien"
for /f "delims=" %%i in ('dir /b/on TLG_SystemArchive_*.csv') do (
set "Name=%%~ni"
set "Name=DAY!Name:~24,2!.XXX"
if not exist "!Name!" (
set /p Kopf=<"%%i"
>"!Name!" echo !Kopf:Date_Time=DATE!
)
more +1 "%%i">>"!Name!"
)
popd
bastla
[Edit] Schreibweise "
!Name!
" und Ersetzung in Kopfzeile angepasst. [/Edit]