freshman2017
Goto Top

Batch - Datenfiltern anhand bestimmter Voraussetzungen (nicht älter als 30 Tage)

Guten Tag liebe Gemeinde,

ich bin gerade dabei ein kleines Batch-Skript zu erstellen, was mir meine Daten filtert.

Ich würde gerne aus einer Textdatei jeweils immer die Zeile in einer Zieldatei stehen haben, bei dem der Wert in der 2. Spalte kleinste ist, aber anhand des Datums, was nicht älter sein darf als 30 Tage.

Geht das mit Batch?

TXT-Input:

1000-001;5,00;19.07.2022;
1000-001;3,00;14.07.2022;
1000-001;5,00;19.07.2022;
1000-001;5,00;19.06.2022;
1000-001;5,25;19.07.2022;
1000-001;4,00;19.07.2022;
1000-002;5,25;19.04.2022;
1000-002;4,00;19.06.2022;
1000-002;2,00;01.07.2022;

TXT-Output:

1000-001;3,00;14.07.2022;
1000-002;2,00;01.07.2022;

Mit den besten sonnigsten Grüßen

Content-Key: 3379572611

Url: https://administrator.de/contentid/3379572611

Printed on: May 4, 2024 at 13:05 o'clock

Member: TK1987
TK1987 Jul 19, 2022 updated at 14:11:22 (UTC)
Goto Top
Moin,

Zitat von @freshman2017:
Ich würde gerne aus einer Textdatei jeweils immer die Zeile in einer Zieldatei stehen haben, bei dem der Wert in der 2. Spalte kleinste ist, aber anhand des Datums, was nicht älter sein darf als 30 Tage.

Geht das mit Batch?
alleine schon das Datum -30 Tage zu berechnen und danach zu filtern ist mit Batch kaum anständig möglich.

Mit Powershell ist das Ganze ein Kinderspiel:
# Quelldatei und Zieldatei
$Source = "C:\Pfad\zur\Import.csv"  
$Target = "C:\Pfad\zur\Ausgabe.csv"  

# Als CSV-Daten importieren
$CSV = Import-CSV -Path $Source -Delimiter ';' -Header 'Nummer','Wert','Datum'  

# Datei nach Datum filtern und nach Werten Sortieren
$CSV = $CSV | Where {[datetime]::Parse($_.Datum) -ge (Get-Date).Date.AddDays(-30)} | Sort {[double]$_.Wert}

# Für jede Nummer den niedrigsten Wert ausgeben
$Output = $CSV | Group 'Nummer' |Foreach {$_.Group}  

# In Text umwandeln und Ausgeben
($Output | ConvertTo-CSV -NoTypeInformation -Delimiter ';').Replace('"','') | Select -Skip 1 | Set-Content $Target  
Powershell Leitfaden für Anfänger

Gruß Thomas