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-Key: 3970933979

Url: https://administrator.de/contentid/3970933979

Printed on: May 17, 2024 at 03:05 o'clock

Mitglied: 3803037559
Solution 3803037559 Sep 17, 2022 at 15:37:07 (UTC)
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
Member: c0r32quad
c0r32quad Sep 17, 2022 at 17:35:45 (UTC)
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!
Mitglied: 3803037559
3803037559 Sep 17, 2022 updated at 19:13:07 (UTC)
Goto Top
Ups sorry Tippfehler musste
"!newname!%%~xa"  
lauten. Dann muss man die Endung nicht manuell pflegen.
Member: TwistedAir
TwistedAir Sep 18, 2022 at 09:41:11 (UTC)
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
Member: c0r32quad
c0r32quad Oct 02, 2022 at 11:20:08 (UTC)
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!