Per Batch csv Datei nach Inhalt umbenennen
Hallo zusammen,
ich würde bei etwas gerne eure Hilfe in Anspruch nehmen.
Ich habe mir eine Batch Datei geschrieben, um Daten die von meiner PV Anlage erzeugt werden, Automatisch zu entpacken (zip) und dann die Dateien (.csv) umzubenennen nach ihrem Inhalt.
Es kommt in diesen Ordner jeden Tag eine .zip Datei dazu, die im gleichen Ordner entpackt werden soll. Die Entpackte .csv Datei hat einen zufälligen 16 stelligen Namen.
Dateiname ist dann z.B.: 257yRYaggUvsF0x6.csv
Die .csv Datei ist wie folgt aufgebaut:
Es soll das Datum, also 2022-09-15, als neuer Dateiname gesetzt werden.
Es können aber auch mal 2 oder mehr .zip Dateien dazu kommen wenn ich nicht jeden Tag die Daten abrufe (kommen per E-Mail)
Im Prinzip klappt das mittlerweile ganz gut.
Entpacken und danach die .zip Datein löschen geht problemlos.
Beim Umbenennen komme ich jetzt aber nicht weiter:
Ich lasse den Inhalt des Ordners (bzw. die darin Enthaltenen .csv Dateien) in eine Textdatei schreiben, um sie danach mit einer for Schleife wieder auszulesen.
Somit wähle ich die Datei aus die Umbenannt werden soll.
Die Erste Datei auswählen (in diesen Fall die Neuste) und den Inhalt auslesen und die Datei umbenennen geht.
Wo ich jetzt nicht weiterkomme ist die anderen Dateien die in dem Ordner sind (weil vielleicht 2 oder 3 an dem Tag dazu gekommen sind) auch umzubennen.
Bis her habe ich folgendes: (alles vor dem .zip löschen geht problemlos)
Die vorhandenen, schon umbenannten Dateien, sollen nach möglichkeit nicht nochmal ausgelesen und umbenannt werden, da es irgendwann hunderte bzw Tausende Dateien werden.
Sprich alles in dem Muster "????-??-??.csv" soll ignoriert werden.
Leider bin ich kein Programmierer und meine angeeigneten Kenntnisse reichen dafür einfach nicht.
Beste Grüße
ich würde bei etwas gerne eure Hilfe in Anspruch nehmen.
Ich habe mir eine Batch Datei geschrieben, um Daten die von meiner PV Anlage erzeugt werden, Automatisch zu entpacken (zip) und dann die Dateien (.csv) umzubenennen nach ihrem Inhalt.
Es kommt in diesen Ordner jeden Tag eine .zip Datei dazu, die im gleichen Ordner entpackt werden soll. Die Entpackte .csv Datei hat einen zufälligen 16 stelligen Namen.
Dateiname ist dann z.B.: 257yRYaggUvsF0x6.csv
Die .csv Datei ist wie folgt aufgebaut:
device_label,time,mac,power (Watt),energy (Ws),cost,temperature
PV,2022-09-15 00:00:00,083AF273A530,107.39,7781147.99,0.84295774,20.04
Es soll das Datum, also 2022-09-15, als neuer Dateiname gesetzt werden.
Es können aber auch mal 2 oder mehr .zip Dateien dazu kommen wenn ich nicht jeden Tag die Daten abrufe (kommen per E-Mail)
Im Prinzip klappt das mittlerweile ganz gut.
Entpacken und danach die .zip Datein löschen geht problemlos.
Beim Umbenennen komme ich jetzt aber nicht weiter:
Ich lasse den Inhalt des Ordners (bzw. die darin Enthaltenen .csv Dateien) in eine Textdatei schreiben, um sie danach mit einer for Schleife wieder auszulesen.
Somit wähle ich die Datei aus die Umbenannt werden soll.
Die Erste Datei auswählen (in diesen Fall die Neuste) und den Inhalt auslesen und die Datei umbenennen geht.
Wo ich jetzt nicht weiterkomme ist die anderen Dateien die in dem Ordner sind (weil vielleicht 2 oder 3 an dem Tag dazu gekommen sind) auch umzubennen.
Bis her habe ich folgendes: (alles vor dem .zip löschen geht problemlos)
:1
del *.zip
:2
cls
color 3
echo.
echo Jetzt noch eben umbennen...
echo.
timeout 1
cls
setlocal enableDelayedExpansion
dir *.csv /b /o:-d > Ordnerinhalt.txt
timeout 1
cls
set /p Datei=< Ordnerinhalt.txt
set DateiUmbenennen=%Datei%
for /f "skip=1 eol=; tokens=2 delims=, " %%i in (%PROG_PATH%\%Datei%) do set "Dateiinhalt=%%i"
echo Dateiinhalt: %Dateiinhalt% von Datei: %Datei%
echo.
echo Folgende Datei wird Umbenannt:
echo.
echo -^> %Datei%
set DateiNeu=%Dateiinhalt%
echo.
echo Neuer Dateiname:
echo.
echo -^> %Dateiinhalt%
echo.
timeout 10
ren "!Datei!" "!DateiNeu!.csv"
Die vorhandenen, schon umbenannten Dateien, sollen nach möglichkeit nicht nochmal ausgelesen und umbenannt werden, da es irgendwann hunderte bzw Tausende Dateien werden.
Sprich alles in dem Muster "????-??-??.csv" soll ignoriert werden.
Leider bin ich kein Programmierer und meine angeeigneten Kenntnisse reichen dafür einfach nicht.
Beste Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3970933979
Url: https://administrator.de/forum/per-batch-csv-datei-nach-inhalt-umbenennen-3970933979.html
Ausgedruckt am: 17.04.2025 um 16:04 Uhr
5 Kommentare
Neuester Kommentar

@echo off &setlocal enabledelayedexpansion
set "ordner=%~dp0"
for /f "delims=" %%a in ('dir /b /a-d "%ordner%\*.csv" ^| findstr /v "^[0-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]"') do (
set "newname="
for /f "usebackq skip=1 tokens=2 delims=, " %%b in ("%%a") do (if not defined newname set "newname=%%b")
ren "%ordner%\%%a" "!newname!%%~xa"
)
certguy

Ups sorry Tippfehler musste
lauten. Dann muss man die Endung nicht manuell pflegen.
"!newname!%%~xa"
Zitat von @c0r32quad:
Ich musste nur in der 6. Zeile das
durch
ändern. Sonst ging es nicht. Ich weiß leider aber auch nicht warum, da mir die Zeichenfolge nichts sagt.
Ich musste nur in der 6. Zeile das
"!newname!%~nxa"
"!newname!.csv"
Bitte: Command Line arguments (Parameters)
Schönes WE
TA