al3x 11 Geschrieben 13. November 2017 Melden Teilen Geschrieben 13. November 2017 Hallo zusammen, folgende Situation, ich habe einen Ordner mit mehreren .csv mit gleichem Aufbau, an der x. Stelle in Zeile 1 steht das Datum jjjjmmd (In allen csv gleich). Dieses möchte ich gern auslesen (Batch oder PS) und in eine Variable packen, damit ich im Anschluß alle csv´s zippen und mit dem ausgelesenen Datum benennen kann. Der 2. Teil ist klar, aber ich weiß nicht wie ich an das Datumsfeld komme. Eventuell mit findstr? Kann mir hier jemand helfen? Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 13. November 2017 Melden Teilen Geschrieben 13. November 2017 Was hast Du denn schon? Steht das Datum immer an der gleichen Stelle? Steht es wirklich in der 1. Zeile, also der Header-Zeile? Zitieren Link zu diesem Kommentar
al3x 11 Geschrieben 13. November 2017 Autor Melden Teilen Geschrieben 13. November 2017 ja, es steht immer an der gleichen Stelle. Es handelt sich um eine EDI-Rechnung mit Absender;Empfänger;Adresse; etc...... Bisher habe ich immer das Systemdatum genommen: (for /F "tokens=1-4 delims=." %%i in ('date /t') DO SET date=%%k%%j%%i) ...dies setzt allerdings voraus, dass der Vorgang immer am gleichen Tag durchgeführt wird. Ich dachte nun es sei geschickter, das Datum einfach aus der csv auszulesen und beim Erstellen der zip dann das Rechnungsdatum als Dateiname zu verwenden (statt das Systemdatum zum Erstellungszeitpunkt). Hab aber keine Idee, wie ich vorgehen muss. Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 13. November 2017 Melden Teilen Geschrieben 13. November 2017 Du kannst die Dateien als CSV (ConvertFrom-Csv) einlesen und hast alle Spalten als Wert verfügbar. $csv = get-content /path/to/file.csv | ConvertFrom-Csv $csv.Datum Zitieren Link zu diesem Kommentar
al3x 11 Geschrieben 13. November 2017 Autor Melden Teilen Geschrieben 13. November 2017 kannst du das etwas präzisieren? wie komm ich denn zB an den Spaltenwert 37? Header gibt es in der csv keine. Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 13. November 2017 Melden Teilen Geschrieben 13. November 2017 Versuche es einmal und schau dir das Powershell Objekt an. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 13. November 2017 Melden Teilen Geschrieben 13. November 2017 Wenn es sowieso keine Header gibt, kannst Du auch einfach die erste Zeile einlesen, die entsprechende Stelle mittels SubString Methode rausfräsen und das einer Variable zuweisen. Also so ungefähr: $DatumsString = (Get-Content -Path 'voller Pfad zu Deiner CSV-Datei' | Select-Object -First 1 ).SubString(37,8) Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 13. November 2017 Melden Teilen Geschrieben 13. November 2017 Man kann auch nach bestimmten Zeichen schauen (z.B. Semikolon) und danach splitten (indexof, split). Zitieren Link zu diesem Kommentar
al3x 11 Geschrieben 13. November 2017 Autor Melden Teilen Geschrieben 13. November 2017 Wenn es sowieso keine Header gibt, kannst Du auch einfach die erste Zeile einlesen, die entsprechende Stelle mittels SubString Methode rausfräsen und das einer Variable zuweisen. Also so ungefähr: $DatumsString = (Get-Content -Path 'voller Pfad zu Deiner CSV-Datei' | Select-Object -First 1 ).SubString(37,8) ok hier komm ich zumindest mal an einen Wert, allerdings zeigt er mir das 37. Zeichen und nicht die 37. Spalte Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 13. November 2017 Melden Teilen Geschrieben 13. November 2017 Kannst du mal eine Beispiel Datei hier posten? Wir geben nur Beispielswerte an, diese musst du natürlich auf deine Dateien anpassen. Zitieren Link zu diesem Kommentar
al3x 11 Geschrieben 13. November 2017 Autor Melden Teilen Geschrieben 13. November 2017 02;1;1;STCK;15449.4;15449.4;308988;19;2935.39;5500002194;;;85477;;Modell4711;981080;20171110;;;;;; Das ist zwar die 2. Zeile, aber hier steht auch ein Datum. Wäre in dem Fall, sofern ich mich nicht verzählt habe der 17. Wert. Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 13. November 2017 Melden Teilen Geschrieben 13. November 2017 Dann sollte das z.B. wie folgt gehen: (Get-Content pfad/zur/datei.csv)[1].split(';')[16] Zitieren Link zu diesem Kommentar
al3x 11 Geschrieben 13. November 2017 Autor Melden Teilen Geschrieben 13. November 2017 ok, werde ich später testen...thx schon mal Zitieren Link zu diesem Kommentar
al3x 11 Geschrieben 14. November 2017 Autor Melden Teilen Geschrieben 14. November 2017 okay super das klappt! Kennst du auch die Lösung für Batch? Denn nun habe ich Batch und PS gemischt :-D Zitieren Link zu diesem Kommentar
testperson 1.707 Geschrieben 14. November 2017 Melden Teilen Geschrieben 14. November 2017 Hi, ich würde den Batch-Teil einfach ebenfalls in PS umsetzen und somit auf Batch verzichten. Gruß Jan Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.