c0r32quad
Goto Top

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:

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

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

3803037559
Lösung 3803037559 17.09.2022 um 17:37:07 Uhr
Goto Top
@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"  
)
Cheers
certguy
c0r32quad
c0r32quad 17.09.2022 um 19:35:45 Uhr
Goto Top
WOW das ging ja unglaublich schnell!

Vielen Dank.

Ich musste nur in der 6. Zeile das
"!newname!%~nxa"  

durch

"!newname!.csv"  

ändern. Sonst ging es nicht. Ich weiß leider aber auch nicht warum, da mir die Zeichenfolge nichts sagt.
Trotzallem unglaublich schnell und sehr gut, denn es Funktioniert!
3803037559
3803037559 17.09.2022 aktualisiert um 21:13:07 Uhr
Goto Top
Ups sorry Tippfehler musste
"!newname!%%~xa"  
lauten. Dann muss man die Endung nicht manuell pflegen.
TwistedAir
TwistedAir 18.09.2022 um 11:41:11 Uhr
Goto Top
Zitat von @c0r32quad:

Ich musste nur in der 6. Zeile das
"!newname!%~nxa"  
durch
"!newname!.csv"  
ändern. Sonst ging es nicht. Ich weiß leider aber auch nicht warum, da mir die Zeichenfolge nichts sagt.

Bitte: Command Line arguments (Parameters)

Schönes WE
TA
c0r32quad
c0r32quad 02.10.2022 um 13:20:08 Uhr
Goto Top
Vielen Dank nochmal für die Hilfe! Klappt alles Problemlos.
Auch der Link mit den "Command Line arguments (Parameters)" ist sehr hilfreich, danke!