lakslo
Goto Top

BATCH: Information aus CSV Datei holen und für Umbenennung einer Datei nutzen

Liebe Batch Profis,

ich bin damit konfrontiert aus einer CSV Datei einen Wert zu holen und mit diesem Wert die Datei (dieselbe Datei) umzubenennen. Ich habe wirklich keine Ahnung wie man das angehen könnte – es sollte wenn irgendwie möglich mit einem normalen Script (.cmd Datei) funktionieren.

Als Beispiel …
CSV Datei mit Namen „Final_Ergebnis_MAN17.csv“ schaut so aus:
Buchungskreis;Budgetjahr;Stichtag;Stelle LFD;Stellennummer;Unterabschnitt;Kurztext
1002;2014;20140313 ;00001952;00001952;010000;AL

Ich möchte den Buchungskreis (=1002) auslesen und dann den Namen des Files ändern in:
„DPP1002_yyyymmdd.csv“

Das Datum ist mir klar – aber wie ich den Wert = 1002 bekomme leider nicht.
Gibt es Vorschläge, Ideen?

LG
Lakslo

PS: Die nächste Herausforderung wird dann noch das ganze in einer "for /f" Schleife für X Dateien zu implementieren ...

Content-ID: 232494

Url: https://administrator.de/forum/batch-information-aus-csv-datei-holen-und-fuer-umbenennung-einer-datei-nutzen-232494.html

Ausgedruckt am: 09.04.2025 um 10:04 Uhr

bastla
Lösung bastla 13.03.2014, aktualisiert am 19.03.2014 um 18:47:15 Uhr
Goto Top
Hallo Lakslo!

Unter der Annahme, dass der gesuchte Buchungskreis immer am Beginn der 2. Zeile steht und die Dateien nach dem Schema "Final_Ergebnis_*.csv" benannt sind, könnte das etwa so gehen:
@echo off & setlocal
set "Ordner=D:\Ordner mit den csv-Dateien"  
set "Datei=Final_Ergebnis_*.csv"  

pushd "%Ordner%"  
for /f "delims=" %%i in ('dir /b "%Datei%"') do call :ProcessFile "%%i"  
pause
goto :eof

:ProcessFile
set "BK="  
for /f "usebackq skip=1 tokens=1 delims=;" %%a in (%1) do if not defined BK set "BK=%%a"  
if not defined BK (
    echo Buchungskreis in %1 nicht gefunden!
    pause
    goto :eof
)
echo ren %1 "DPP%BK%_%date:~-4%%date:~-7,2%%date:~-10,2%.csv"  
goto :eof
Wegen des echo vor dem ren wird das Umbenennen zunächst nur durch Ausgabe des jeweilgen Befehls simuliert - wenn Du das echo (und die dann überflüssige Zeile 7) weg lässt, werden die Namen tatsächlich (und kommentarlos) geändert.

Grüße
bastla
Lakslo
Lakslo 15.03.2014 um 17:20:56 Uhr
Goto Top
Hallo bastla,

vielen Dank für Deine Unterstützung.
Ich werde das nächste Woche testen und mich dann (hoffentlich) am Ende der Woche nochmals ganz herzlich bedanken ...

LG
Lakslo
Lakslo
Lakslo 19.03.2014 aktualisiert um 17:02:52 Uhr
Goto Top
Hallo bastla,a

das sieht schon sehr gut aus - vielen Dank dafür.
Jetzt bin ich noch auf die Idee gekommen statt dem Datum gleich den Stichtag aus dem File zu nehmen. Habe das folgendermassen versucht - funkt aber leider nicht da die Dateiendung im Weg ist. Neu ist als PrcessFile2 - hast Du da auch noch eine Idee?

LG
Lakslo

pushd "%Ziel1%"  
for /f "delims=" %%i in ('dir /b "%Datei%"') do call :ProcessFile1 "%%i"  
for /f "delims=" %%i in ('dir /b "%Datei%"') do call :ProcessFile2 "%%i"  
pause
goto :eof

:ProcessFile1
set "BK="  
for /f "usebackq skip=1 tokens=1 delims=;" %%a in (%1) do if not defined BK set "BK=%%a"  
if not defined BK (
    echo Buchungskreis in %1 nicht gefunden!
    pause
    goto :eof
)
ren %1 "DPP%BK%.csv"  
goto :eof

:ProcessFile2
set "Stichtag="  
for /f "usebackq skip=1 tokens=3 delims=;" %%a in (%1) do if not defined Stichtag set "Stichtag=%%a"  

if not defined Stichtag (
    echo Stichtag in %1 nicht gefunden!
    pause
    goto :eof
)
echo ren %1 %1_%Stichtag%.csv

goto :eof
bastla
Lösung bastla 19.03.2014 aktualisiert um 18:47:22 Uhr
Goto Top
Hallo Lakslo!

Wenn Du das Datum aus Feld 3 der CSV-Datei meinst etwa so:
@echo off & setlocal
set "Ordner=D:\Ordner mit den csv-Dateien"  
set "Datei=Final_Ergebnis_*.csv"  

pushd "%Ordner%"  
for /f "delims=" %%i in ('dir /b "%Datei%"') do call :ProcessFile "%%i"  
pause
goto :eof

:ProcessFile
set "BK=" & set "Datum="  
for /f "usebackq skip=1 tokens=1,3 delims=;" %%a in (%1) do if not defined BK (set "BK=%%a" & set "Datum=%%b")  
if not defined BK (
    echo Buchungskreis in %1 nicht gefunden!
    pause
    goto :eof
)
if not defined Datum (
    echo Datum in %1 nicht gefunden!
    pause
    goto :eof
)
echo ren %1 "DPP%BK%_%Datum%.csv"  
goto :eof
Grüße
bastla

P.S.: Verwende für das Posten von Code bitte das passende Format - geht auch nachträglich noch ... face-wink
Lakslo
Lakslo 19.03.2014 um 18:48:04 Uhr
Goto Top
Hallo bastla,

hat SUPER funktioniert.
Vielen Dank!

LG
Lakslo

PS: Formatierung natürlich nachgetragen