CMD - Spalte in CSV Datei hinzufügen mit Datei-Erstelldatum
Hallo Gemeinde,
ich stehe aufm Schlauch und benötige eure Hilfe.
Hintergrund:
Ich erhalte stündlich einen Report per csv, dieser hat immer den gleichen Namen z.B. datei.csv. Diese Datei lade ich nach Erhalt sofort in eine MySQL Datenbank für weitere Verarbeitung.
Mein Problem:
Die datei.csv hat folgenden Inhalt:
pg;mat;price
1;mat1;25
2;mat34;26
usw
Anforderung:
ich würde gern per cmd/bat File dieser csv einen "Timestamp" = Datei-Erstelldatum hinzufügen z.B. 2023-05-12 10:00.
pg;mat;price;stamp
1;mat1;25;2023-05-12 10:00
2;mat34;26;2023-05-12 10:00
Zum Verständnis: Timestamp ist für mich später ganz wichtig, da ich die Preisentwicklungen einsehen/dem Datum zuordnen möchte.
Variante A: ich bekomme das mit einer CMD hin + anschließend die Datei in die MySql laden
Variante B: kann das die MySql auch? (beim Import der Datei deren Erstelldatum auslesen)
Variante C: alternativ Vorschläge?
ich stehe aufm Schlauch und benötige eure Hilfe.
Hintergrund:
Ich erhalte stündlich einen Report per csv, dieser hat immer den gleichen Namen z.B. datei.csv. Diese Datei lade ich nach Erhalt sofort in eine MySQL Datenbank für weitere Verarbeitung.
Mein Problem:
Die datei.csv hat folgenden Inhalt:
pg;mat;price
1;mat1;25
2;mat34;26
usw
Anforderung:
ich würde gern per cmd/bat File dieser csv einen "Timestamp" = Datei-Erstelldatum hinzufügen z.B. 2023-05-12 10:00.
pg;mat;price;stamp
1;mat1;25;2023-05-12 10:00
2;mat34;26;2023-05-12 10:00
Zum Verständnis: Timestamp ist für mich später ganz wichtig, da ich die Preisentwicklungen einsehen/dem Datum zuordnen möchte.
Variante A: ich bekomme das mit einer CMD hin + anschließend die Datei in die MySql laden
Variante B: kann das die MySql auch? (beim Import der Datei deren Erstelldatum auslesen)
Variante C: alternativ Vorschläge?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 7123857109
Url: https://administrator.de/forum/cmd-spalte-in-csv-datei-hinzufuegen-mit-datei-erstelldatum-7123857109.html
Ausgedruckt am: 15.03.2025 um 08:03 Uhr
16 Kommentare
Neuester Kommentar
Powershell
Aus dem Kopf geschrieben also bitte mit Testdatei prüfen
$Datei="C:\temp\datei.csv"
import-csv -Path $Datei -Delimiter ";" -Encoding UTF8 | Add-Member -MemberType NoteProperty -Name "stamp" -Value (get-date ((Get-ChildItem $Datei).CreationTime)) -Format "yyyy-MM-dd mm:ss") | Export-Csv -Path $Datei -Delimiter -Encoding UTF8 -NoTypeInformation
Aus dem Kopf geschrieben also bitte mit Testdatei prüfen

Hi,
Da waren die Klammern falsch, sollte wohl so aussehen:
Hinweis: nach jedem Pipeline-Operator "|" darf man ein newline setzen, das erhöht etwas die Übersichtlichkeit
-Thomas
Da waren die Klammern falsch, sollte wohl so aussehen:
$Datei="C:\temp\datei.csv"
import-csv -Path $Datei -Delimiter ";" -Encoding UTF8 |
Add-Member -MemberType NoteProperty -Name "stamp" -Value (get-date ((Get-ChildItem $Datei).CreationTime) -Format "yyyy-MM-dd mm:ss") |
Export-Csv -Path $Datei -Delimiter -Encoding UTF8 -NoTypeInformation
-Thomas

So funktionierts:
Der Fehler war, dass angenommen wurde, dass Add-Member das bearbeitete Objekt in die Pipeline weitergibt, was es leider nicht tut.
EDIT: im Zeitformat war noch ein Fehler, eben gefixt.
-Thomas
$datei = "C:\tmp\1.csv"
$csv = Import-csv -Path $Datei -Delimiter ";" -Encoding UTF8
$csv | Add-Member -MemberType NoteProperty -Name 'stamp' -Value (get-date ((Get-ChildItem $Datei).CreationTime) -Format "yyyy-MM-dd HH:mm")
$csv | Export-Csv -Path $Datei -Delimiter ";" -Encoding UTF8 -NoTypeInformation
EDIT: im Zeitformat war noch ein Fehler, eben gefixt.
-Thomas

Bitte noch die Lösung markieren 
-Thomas
-Thomas

Der Fehler war, dass angenommen wurde, dass Add-Member das bearbeitete Objekt in die Pipeline weitergibt, was es leider nicht tut.
Nur als Ergänzung: Mit dem-Passthru-Parameter würde es das auch tun.
Zitat von @7010350221:
Der Fehler war, dass angenommen wurde, dass Add-Member das bearbeitete Objekt in die Pipeline weitergibt, was es leider nicht tut.
Nur als Ergänzung: Mit dem-Passthru-Parameter würde es das auch tun.Möchte man meinen, tuts aber nicht (war auch mein erster Versuch)
$datei = "C:\tmp\a.csv"
Import-csv -Path $Datei -Delimiter ";" -Encoding UTF8 |
Add-Member -MemberType NoteProperty -Name 'stamp' -Value (get-date ((Get-ChildItem $Datei).CreationTime) -Format "yyyy-MM-dd HH:mm") -PassThru |
Export-Csv -Path $Datei -Delimiter ";" -Encoding UTF8 -NoTypeInformation
-Thomas

Zitat von @3063370895:
Möchte man meinen, tuts aber nicht (war auch mein erster Versuch)
leert die CSV
-Thomas
Zitat von @7010350221:
Der Fehler war, dass angenommen wurde, dass Add-Member das bearbeitete Objekt in die Pipeline weitergibt, was es leider nicht tut.
Nur als Ergänzung: Mit dem-Passthru-Parameter würde es das auch tun.Möchte man meinen, tuts aber nicht (war auch mein erster Versuch)
$datei = "C:\tmp\a.csv"
Import-csv -Path $Datei -Delimiter ";" -Encoding UTF8 |
Add-Member -MemberType NoteProperty -Name 'stamp' -Value (get-date ((Get-ChildItem $Datei).CreationTime) -Format "yyyy-MM-dd HH:mm") -PassThru |
Export-Csv -Path $Datei -Delimiter ";" -Encoding UTF8 -NoTypeInformation
-Thomas
Ist ja kein Wunder wenn du in der Pipe gleichzeitig die Datei lesen und in die selbe Datei zurückschreiben willst
$datei = "C:\tmp\a.csv"
(Import-csv -Path $Datei -Delimiter ";" -Encoding UTF8) | Add-Member -MemberType NoteProperty -Name 'stamp' -Value (get-date ((Get-ChildItem $Datei).CreationTime) -Format "yyyy-MM-dd HH:mm") -PassThru | Export-Csv -Path $Datei -Delimiter ";" -Encoding UTF8 -NoTypeInformation

Merkwürdig, dass dann keine Fehlermeldung kommt und die Datei geleert wird.
bei get-content | setcontent kommt die entsprechende Meldung
-Thomas
bei get-content | setcontent kommt die entsprechende Meldung
Set-Content : Der Prozess kann nicht auf die Datei "C:\tmp\a.txt" zugreifen, da sie von einem anderen Prozess verwendet wird.
-Thomas

$quelle = 'D:\quelle'
$ziel = 'D:\ziel'
foreach($file in Get-ChildItem $quelle -File -Filter *.csv){
Import-csv -Path $file.Fullname -Delimiter ';' -Encoding UTF8 | Add-Member -MemberType NoteProperty -Name 'stamp' -Value $file.CreationTime.toString('yyyy-MM-dd HH:mm') -PassThru | Export-Csv -Path "$ziel\$($file.Name)" -Delimiter ';' -Encoding UTF8 -NoTypeInformation -Force
remove-item $file.Fullname
}