Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

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

Frage Entwicklung Batch & Shell

Mitglied: Lakslo

Lakslo (Level 1) - Jetzt verbinden

13.03.2014, aktualisiert 19.03.2014, 1486 Aufrufe, 5 Kommentare

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 ...
Mitglied: bastla
LÖSUNG 13.03.2014, aktualisiert 19.03.2014
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:
01.
@echo off & setlocal 
02.
set "Ordner=D:\Ordner mit den csv-Dateien" 
03.
set "Datei=Final_Ergebnis_*.csv" 
04.
 
05.
pushd "%Ordner%" 
06.
for /f "delims=" %%i in ('dir /b "%Datei%"') do call :ProcessFile "%%i" 
07.
pause 
08.
goto :eof 
09.
 
10.
:ProcessFile 
11.
set "BK=" 
12.
for /f "usebackq skip=1 tokens=1 delims=;" %%a in (%1) do if not defined BK set "BK=%%a" 
13.
if not defined BK ( 
14.
    echo Buchungskreis in %1 nicht gefunden! 
15.
    pause 
16.
    goto :eof 
17.
18.
echo ren %1 "DPP%BK%_%date:~-4%%date:~-7,2%%date:~-10,2%.csv" 
19.
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
Bitte warten ..
Mitglied: Lakslo
15.03.2014 um 17:20 Uhr
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
Bitte warten ..
Mitglied: Lakslo
19.03.2014, aktualisiert um 17:02 Uhr
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

01.
pushd "%Ziel1%" 
02.
for /f "delims=" %%i in ('dir /b "%Datei%"') do call :ProcessFile1 "%%i" 
03.
for /f "delims=" %%i in ('dir /b "%Datei%"') do call :ProcessFile2 "%%i" 
04.
pause 
05.
goto :eof 
06.
 
07.
:ProcessFile1 
08.
set "BK=" 
09.
for /f "usebackq skip=1 tokens=1 delims=;" %%a in (%1) do if not defined BK set "BK=%%a" 
10.
if not defined BK ( 
11.
    echo Buchungskreis in %1 nicht gefunden! 
12.
    pause 
13.
    goto :eof 
14.
15.
ren %1 "DPP%BK%.csv" 
16.
goto :eof 
17.
 
18.
:ProcessFile2 
19.
set "Stichtag=" 
20.
for /f "usebackq skip=1 tokens=3 delims=;" %%a in (%1) do if not defined Stichtag set "Stichtag=%%a" 
21.
 
22.
if not defined Stichtag ( 
23.
    echo Stichtag in %1 nicht gefunden! 
24.
    pause 
25.
    goto :eof 
26.
27.
echo ren %1 %1_%Stichtag%.csv 
28.
 
29.
goto :eof
Bitte warten ..
Mitglied: bastla
LÖSUNG 19.03.2014, aktualisiert um 18:47 Uhr
Hallo Lakslo!

Wenn Du das Datum aus Feld 3 der CSV-Datei meinst etwa so:
01.
@echo off & setlocal 
02.
set "Ordner=D:\Ordner mit den csv-Dateien" 
03.
set "Datei=Final_Ergebnis_*.csv" 
04.
 
05.
pushd "%Ordner%" 
06.
for /f "delims=" %%i in ('dir /b "%Datei%"') do call :ProcessFile "%%i" 
07.
pause 
08.
goto :eof 
09.
 
10.
:ProcessFile 
11.
set "BK=" & set "Datum=" 
12.
for /f "usebackq skip=1 tokens=1,3 delims=;" %%a in (%1) do if not defined BK (set "BK=%%a" & set "Datum=%%b") 
13.
if not defined BK ( 
14.
    echo Buchungskreis in %1 nicht gefunden! 
15.
    pause 
16.
    goto :eof 
17.
18.
if not defined Datum ( 
19.
    echo Datum in %1 nicht gefunden! 
20.
    pause 
21.
    goto :eof 
22.
23.
echo ren %1 "DPP%BK%_%Datum%.csv" 
24.
goto :eof
Grüße
bastla

P.S.: Verwende für das Posten von Code bitte das passende Format - geht auch nachträglich noch ...
Bitte warten ..
Mitglied: Lakslo
19.03.2014 um 18:48 Uhr
Hallo bastla,

hat SUPER funktioniert.
Vielen Dank!

LG
Lakslo

PS: Formatierung natürlich nachgetragen
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
VB for Applications
Bestimmte Daten aus eine CSV-Datei in eine Excel-Tabelle importieren (2)

Frage von MariaElena zum Thema VB for Applications ...

Batch & Shell
gelöst PS Werte CSV-Datei in AD Attribut (3)

Frage von lupolo zum Thema Batch & Shell ...

Batch & Shell
Mehrere AD Benutzer aus CSV Datei mit PowerShell erstellen (1)

Frage von windelterrorist zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...