Powershell - Batch - Dateien vergleichen und neue Datei erstellen
Liebe Gemeinde,
gibt es die Möglichkeit mit PowerShell oder Batch folgendes zu erreichen? Ich habe eine multi.csv mit X Spalten, wobei die erste Spalte eine Nummer enthält.
Daneben habe ich eine 2-spaltige single.csv - die zweite Spalte enthält auch eine Nummer, die im besten Falle in der multi.csv enthalten ist.
-> es gibt jetzt aber den Fall, dass die Nummer aus der multi.csv nicht in der single.csv vorkommt. <-
Ich würde jetzt eine outfile.csv haben, die zu einem aus beiden (multi.csv,single.csv) CSVs zusammengebaut sind und wenn die Nummer aus der ersten Spalte der multi.csv nicht in der single.csv vorkommt, soll im Outfile die nächste vorhandene Nummer ab 1000000 genommen werden, sprich die 1000002.
multi.csv:
single.csv:
1000000;01000212;
1000001;01000214;
outfile.csv:
1000000;01000212;;;;;;;;
1000001;01000214;;;;;;;;
1000002;01000232;;;;;;;;
Sonnige Grüße!
gibt es die Möglichkeit mit PowerShell oder Batch folgendes zu erreichen? Ich habe eine multi.csv mit X Spalten, wobei die erste Spalte eine Nummer enthält.
Daneben habe ich eine 2-spaltige single.csv - die zweite Spalte enthält auch eine Nummer, die im besten Falle in der multi.csv enthalten ist.
-> es gibt jetzt aber den Fall, dass die Nummer aus der multi.csv nicht in der single.csv vorkommt. <-
Ich würde jetzt eine outfile.csv haben, die zu einem aus beiden (multi.csv,single.csv) CSVs zusammengebaut sind und wenn die Nummer aus der ersten Spalte der multi.csv nicht in der single.csv vorkommt, soll im Outfile die nächste vorhandene Nummer ab 1000000 genommen werden, sprich die 1000002.
multi.csv:
01000212;;;;;;;;
01000214;;;;;;;;
01000232;;;;;;;;
single.csv:
1000000;01000212;
1000001;01000214;
outfile.csv:
1000000;01000212;;;;;;;;
1000001;01000214;;;;;;;;
1000002;01000232;;;;;;;;
Sonnige Grüße!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3998374298
Url: https://administrator.de/forum/powershell-batch-dateien-vergleichen-und-neue-datei-erstellen-3998374298.html
Ausgedruckt am: 24.03.2025 um 13:03 Uhr
5 Kommentare
Neuester Kommentar

$multi = ".\multi.csv"
$single = ".\single.csv"
$outfile = ".\outfile.csv"
[array]$csv_multi = Import-CSV $multi -Delimiter ";" -Header (1..9)
[array]$csv_single = Import-CSV $single -Delimiter ";" -Header (1..3)
[int]$next = [int]($csv_single.1 | sort {[int]$_} -Descending | select -F 1) + 1
foreach($row in $csv_multi){
$row.2 = $row.1
$search = $csv_single | ?{$_.2 -eq $row.1}
if ($search){
$row.1 = $search.1
}else{
$row.1 = $next
$next++
}
}
($csv_multi | convertto-csv -Delimiter ";" -NoType | select -skip 1) -replace '"' | Set-Content $outfile
cg

Zitat von @CompuBatch:
Wenn ich hier in der mutli.csv die Kopfzeile überspringen möchte, weil diese vorhanden wäre. Wie stelle ich das an?
Wenn ich hier in der mutli.csv die Kopfzeile überspringen möchte, weil diese vorhanden wäre. Wie stelle ich das an?
[array]$csv_multi = Get-Content $multi -Encoding Default | select -skip 1 | ConvertFrom-CSV -Delimiter ";" -Header (1..9)
Wie kann ich hier aus der Multi.csv die Umlaute beibehalten?
s. -Encoding Parameter i.o. Zeile der muss auf das Encoding deiner CSV angepasst werden (z.B. UTF8 für UTF8 oder Default für ANSI).
Zitat von @CompuBatch:
Besten Dank
- bekomme ich hier in irgendeiner Weiße noch eine Optimierung rein, falls 1000 Nummern verglichen werden sollen?
?? Es werden alle Nummern in der Multi-CSV der ersten Spalte verarbeitet.Besten Dank
Bei mir dauert es ca. eine Minute pro Nummer, wenn in der single.csv ca. 1500 Zeilen und in der multi.csv knapp 500000 Zeilen drin stehen?
Pro Zeile der Multi-CSV eine Minute???? Kann nicht sein, dann hast du einen 386er ... Pro Zeile dauert das hier 5 Millisekunden.