Via Batch Datei einer .csv eine Spalte hinzufügen?
Hi,
ich möchte gern mit einer .bat Datei einer .csv Datei eine weitere Spalte hinzufügen.
Zum Beispiel:
So sieht meine .csv Datei jetzt aus
Nummer;Name
1;Heinz
2;Karl
Ich möchte jetzt das Datum in 7 Tagen in der dritten Spalte zu stehen haben sprich:
Nummer;Name;Datum
1;Heinz;10.10.19
2;Karl;10.10.19
1 Antwort
das Anhängen von etwas an eine Zeile ist trivial.
Da das CSV eine Kopfzeile besitzt muss man diese gesondert bearbeiten und im Nachgang den Rest der Datei.
was geschied wird in der Demo kommentiert:
@echo off
setlocal enableDelayedExpansion
rem Umlaute ermöglichen
chcp 65001 >nul
rem Name der zu ändernden Datei in Variable speichern
set "myCSV=mein csv.csv"
rem kleines Hilfsprogramm zum Addieren/Subtrahieren von Tagen zu einem Datum in VBScript erzeugen
echo WScript.Echo DateAdd("d",WScript.Arguments.Item(0),WScript.Arguments.Item(1))>"%temp%\DateAdd.vbs"
rem Makroaufruf definieren (verbessert die die Übersichtlichkeit im Script)
rem Aufruf per: %mac_DateAdd% TageZuAddieren Datum (TageZuAddieren kann auch eine Negative Zahl sein)
rem zB. %macro_DateAdd% -7 31.12.2000
set "macro_DateAdd=cscript /nologo "%temp%\DateAdd.vbs""
rem zur Demo eine Datei schreiben:
rem die "echo" umfassenden Klammer sollen ein Leerzeichen am Ende des umzuleidenden Textes vermeiden!!!!!
(echo Nummer;Name)>"%myCSV%"
(echo 1;Heinz)>>"%myCSV%"
(echo 2;Karl)>>"%myCSV%"
(echo 3;Fränzchen)>>"%myCSV%"
rem Ende Demodatei erzeugen
rem Name für die tempöräre Datei erzeugen
set "tempCSV=%~0.tmp"
rem Anzuhängendes Datum heute +7
for /f "tokens=*" %%a in ('%macro_DateAdd% 7 %date%') do (
set "dateToAppend=%%a"
)
rem Das ergänzte csv wird in eine neue (temporäre) Datei geschrieben) Datei geschrieben und später umbenannt!
rem Kopfzeile ergänzen... (nur 1.Zeile einlesen und schreiben)
rem für dieses Vorhaben muss das CSV nicht in einezelne Token aufgespalten werden. (einfach Neuen Text anhängen)
for /f "usebackq tokens=*" %%a in ("%myCSV%") do (
rem neuen text schreiben
(echo %%a;Datum)>"%tempCSV%"
rem und die Schleife durch goto brechen
goto :break
)
:break
rem nun den Rest der Datei verarbeiten 1.Zeile überspringen
for /f "usebackq skip=1 tokens=*" %%a in ("%myCSV%") do (
rem mal zeigen was passiert
echo aus:%%a wird:%%a;%dateToAppend%
rem hier hängen wir mit >> an die temp-Datei an
(echo %%a;%dateToAppend%)>>"%tempCSV%"
)
echo:
rem tempdatei in Originaldatei umbennen/verschieben
move /y "%tempCSV%" "%myCSV%"
rem geänderte Datei anzeigen
type "%myCSV%"
echo:
rem sol löst man ein CSV in einzelne Felder auf:
for /f "usebackq skip=1 tokens=1-3 delims=;" %%a in ("%myCSV%") do (
echo Nummer=%%a
echo Name =%%b
echo Datum =%%c
echo:
)
pause
Um Tage zu einem Datum zu addieren/Subtrahieren gibt es leider kein Kommando. Deshalb wird ein kleines VBScript erzeugt, welches die Berechnung ausführt.
Das Script ist nicht Fehlerresistent wenn irgendwas mit den übergebenen Parametern nicht stimmt, gibts Mecker von CScript .
Wirst es überleben. dürfte ja nicht schwer sein die Tage und ein Datum TT.MM.JJJJ. hinzuschreiben.