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

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

Printed on: April 19, 2024 at 13:04 o'clock

Member: bastla
Solution bastla Mar 13, 2014, updated at Mar 19, 2014 at 17:47:15 (UTC)
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
Member: Lakslo
Lakslo Mar 15, 2014 at 16:20:56 (UTC)
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
Member: Lakslo
Lakslo Mar 19, 2014 updated at 16:02:52 (UTC)
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
Member: bastla
Solution bastla Mar 19, 2014 updated at 17:47:22 (UTC)
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
Member: Lakslo
Lakslo Mar 19, 2014 at 17:48:04 (UTC)
Goto Top
Hallo bastla,

hat SUPER funktioniert.
Vielen Dank!

LG
Lakslo

PS: Formatierung natürlich nachgetragen