Via Batch Datei einer .csv eine Spalte hinzufügen?

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.

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren