Powershell csv Datei bestimmte Zellen in eine andere csv speichern
Guten Tag,
ich bin derzeit an einer Aufgabe dran. Ich muss aus einer csv Datei bestimmte Zellen in eine andere csv speichern. Ich bin ein komplette neuling bei Powershell. Ich sitze schon mehrere Tag dran und habe bis heute nichts gefunden was mir geholfen hat.
Über eure Hilfe wäre ich sehr dankbar!
Mein Script:
$csv = Import-Csv -path 'C:\Users\product.csv' -Encoding UTF8 -Delimiter "," |
WHERE { $_.status -ne 1}
#Zellen die benötigt werden
$range1 ="A1:A2"
$range2 ="B1:B2"
$range3 ="C1:C2"
$range4 ="CC1:CC2"
$Range5 ="CD1:CD2"
$Range6 ="CE1:CE2"
$range7 ="CF1:CF2"
$range8 ="CG1:CG2"
$range9 ="CH1:CH2"
Get-Content -$range1, $range2, $range3, $range4, $range5, $range6, $range7, $range8, $range9 | format-table -AutoSize
#Platzhalter um zu wissen welche Zellen der Tabelle.
<#$a = ($_.puid)
$b = ($_.ean)
$c = ($_.manufacturerSKU)
$d = ($_.marketingtext)
$e = ($_.keySellingPoints)
$f = ($_.packageContents)
$g = ($_.productFeatures)
$h = ($_.htmlMainSpecs)
$i = ($_.htmlSpecs)#>
$spalte1 = Read-Host "$range1"
$spalte2 = Read-Host "$range2"
$spalte3 = Read-Host "$range3"
$spalte4 = Read-Host "$range4"
$spalte5 = Read-Host "$range5"
$spalte6 = Read-Host "$range6"
$spalte7 = Read-Host "$range7"
$spalte8 = Read-Host "$range8"
$spalte9 = Read-Host "$range9"
#War die Hoffnung, dass das Script nur die Informationen Speichert, anstatt alles.
$Output = "$range1, $range2, $range3, $range4, $range5, $range6, $range7, $range8, $range9"
$csv | Export-Csv -Delimiter ";" -Encoding UTF8 -Path C:\Users\api2.csv -NoTypeInformation
ich bin derzeit an einer Aufgabe dran. Ich muss aus einer csv Datei bestimmte Zellen in eine andere csv speichern. Ich bin ein komplette neuling bei Powershell. Ich sitze schon mehrere Tag dran und habe bis heute nichts gefunden was mir geholfen hat.
Über eure Hilfe wäre ich sehr dankbar!
Mein Script:
$csv = Import-Csv -path 'C:\Users\product.csv' -Encoding UTF8 -Delimiter "," |
WHERE { $_.status -ne 1}
#Zellen die benötigt werden
$range1 ="A1:A2"
$range2 ="B1:B2"
$range3 ="C1:C2"
$range4 ="CC1:CC2"
$Range5 ="CD1:CD2"
$Range6 ="CE1:CE2"
$range7 ="CF1:CF2"
$range8 ="CG1:CG2"
$range9 ="CH1:CH2"
Get-Content -$range1, $range2, $range3, $range4, $range5, $range6, $range7, $range8, $range9 | format-table -AutoSize
#Platzhalter um zu wissen welche Zellen der Tabelle.
<#$a = ($_.puid)
$b = ($_.ean)
$c = ($_.manufacturerSKU)
$d = ($_.marketingtext)
$e = ($_.keySellingPoints)
$f = ($_.packageContents)
$g = ($_.productFeatures)
$h = ($_.htmlMainSpecs)
$i = ($_.htmlSpecs)#>
$spalte1 = Read-Host "$range1"
$spalte2 = Read-Host "$range2"
$spalte3 = Read-Host "$range3"
$spalte4 = Read-Host "$range4"
$spalte5 = Read-Host "$range5"
$spalte6 = Read-Host "$range6"
$spalte7 = Read-Host "$range7"
$spalte8 = Read-Host "$range8"
$spalte9 = Read-Host "$range9"
#War die Hoffnung, dass das Script nur die Informationen Speichert, anstatt alles.
$Output = "$range1, $range2, $range3, $range4, $range5, $range6, $range7, $range8, $range9"
$csv | Export-Csv -Delimiter ";" -Encoding UTF8 -Path C:\Users\api2.csv -NoTypeInformation
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1171964747
Url: https://administrator.de/contentid/1171964747
Ausgedruckt am: 08.11.2024 um 19:11 Uhr
18 Kommentare
Neuester Kommentar
Es wäre sicher sehr hilfreich und übersichtlicher für die Community hier wenn du Code Tags benutzen würdest !!
Wie, das erklären dir die FAQs: Formatierungen in den Beiträgen
Kann man über den Bearbeiten Button übrigens nachträglich korrigieren !
Wie, das erklären dir die FAQs: Formatierungen in den Beiträgen
Kann man über den Bearbeiten Button übrigens nachträglich korrigieren !
Etwas wirr geschrieben das ganze, sinnvoller wäre es gewesen mal Ist und Soll als Vergleich hier zu posten.
Ich bemühe mal meine Glaskugel was du vermutlich vorhast
Exportiert die ersten zwei Zeilen von einer Auswahl an bestimmten Spalten aus Zeilen bei denen die Spalte "Status" nicht 1 ist.
Ich bemühe mal meine Glaskugel was du vermutlich vorhast
Import-Csv -path 'C:\Users\product.csv' -Encoding UTF8 -Delimiter "," | ? status -ne '1' | select puid,ean,manufacturerSKU,marketingtext,keySellingPoints,productFeatures,htmlMainSpecs,htmlSpecs -First 2 | Export-Csv -Path 'C:\Users\api2.csv' -Delimiter ";" -Encoding UTF8 -NoTypeInformation
Dann ändere doch mal das Encoding bei Import-CSV wohlmöglich hat das Quell-File ein anderes Encoding!
Z.B bei ANSI auf -Encoding Default oder alternativ weg lassen.
Wie ich schon geschrieben habe poste ein IST und SOLL der CSV, dann müssen wir hier nicht rum raten!
Z.B bei ANSI auf -Encoding Default oder alternativ weg lassen.
Wenn ich den Status wegnehme, werden mir nur die selects 1. Zeile angezeigt ohne die Informationen die ich dazu brauche.
?? Was bedeutet bei dir selects 1. Zeile ? Sprech doch bitte verständlich.- Stimmt der Delimiter für das Import-File wirklich und auch die Spaltenbezeichnungen?
- Gibt es die Spalte "Status" überhaupt?
- Hat die CSV überhaupt eine Überschriftenzeile?
Wie ich schon geschrieben habe poste ein IST und SOLL der CSV, dann müssen wir hier nicht rum raten!
Zitat von @Dbgrox:
Ich meinte wenn ich den Status -ne1 wegnehme und stattdessen nur select da lasse und den export, schreibt dieser mir nur die namen mit puid bis htmlspecs rein.
Das ist ja auch OK.Ich meinte wenn ich den Status -ne1 wegnehme und stattdessen nur select da lasse und den export, schreibt dieser mir nur die namen mit puid bis htmlspecs rein.
Es gibt keine Spalte mit Status und ich glaube auch keine Überschriftenzeile(kann ich nicht genau sagen, arbeite das 1. mal mit Powershellscripts).
Genau das war die Information die wir hier brauchen, wenn es keine Spalte Status gibt kannst du ja auch nicht nach ihr filtern, logisch oder , die Überschriften muss man dann Import-CSV über den Parameter -Header mitteilen.Da wir hier die Spalten deiner CSV nicht kennen kann ich dir kein dazu passendes Beispiel machen.
Hier ein einfaches Beispiel das du an deines selbst anpassen kannst und du davon dann auch was lernst:
Ausgangs-CSV wäre dieses ( diese hat im Orginal also keine Spaltenüberschriften)
Davon wollen wir nur Vor- und Nachname von den Usern exportieren deren Status 1 ist (hier die letzte Spalte) in dem Fall also nur Max Muster.
Zieldatei wäre demnach
Der dazu passende Code sieht so aus
Du musst also für jede Spalte einen Namen im Parameter -Header vergeben damit diese später in der Pipeline auch als Eigenschaften angesprochen werden können, denn sonst weiß die Powershell ja nicht welche Spalten es beim Select Befehl ansprechen soll.
Als Anfänger solltest du mal hier rein schauen und dir zunächst die Grundlagen aneignen ...
Powershell Leitfaden für Anfänger
https://www.windowspro.de/script/csv-dateien-powershell-erstellen-sortie ...
Ausgangs-CSV wäre dieses ( diese hat im Orginal also keine Spaltenüberschriften)
"Max","Muster","22","1"
"Sabine","Musterfrau","22","0"
Zieldatei wäre demnach
"Vorname";"Nachname"
"Max";"Muster"
Der dazu passende Code sieht so aus
Import-CSV .\import.csv -Delimiter "," -Header "Vorname","Nachname","Alter","Status" | ? Status -eq '1' | select Vorname,Nachname | export-csv .\export.csv -Delimiter ";" -Encoding UTF8 -NoTypeinformation
Als Anfänger solltest du mal hier rein schauen und dir zunächst die Grundlagen aneignen ...
Powershell Leitfaden für Anfänger
https://www.windowspro.de/script/csv-dateien-powershell-erstellen-sortie ...
Zitat von @Dbgrox:
Danke ich bin aufjedenfall einen Schritt weiter, leider übernimmt er trotzem ab der 2. Zeile alle Informationen, auch die nicht benötigten. Ist das normal?
Nein, wir kennen deine Quelldatei nicht und ob da noch zusätzliche Leerzeichen oder sonst was in den Spalten stehen, wenn Sachen übernommen werden hast du die Spaltennamen nicht korrekt definiert oder die Werte des Vergleichs im Where-Object stimmen in der Quelldatei nicht überein, oder der Delimiter der Quelldatei stimmt schon nicht, as simple as that.Danke ich bin aufjedenfall einen Schritt weiter, leider übernimmt er trotzem ab der 2. Zeile alle Informationen, auch die nicht benötigten. Ist das normal?
Deswegen habe ich hier jetzt schon zum dritten mal gesagt IST Zustand der ersten paar Zeilen der Quell-CSV mit Code-Tags als Text und nicht als Bild posten dann kann man dir weiterhelfen ansonsten Glaskugel!!
Moin,
Das ist kein CSV. Die Informationen eines Datensatzes stehen in mehreren Zeilen. Das kann so nichts werden. Eine vollständige Beispieldatei als Text (Code-Tags nicht vergessen) wäre wirklich hilfreich.
Liebe Grüße
Erik
Das ist kein CSV. Die Informationen eines Datensatzes stehen in mehreren Zeilen. Das kann so nichts werden. Eine vollständige Beispieldatei als Text (Code-Tags nicht vergessen) wäre wirklich hilfreich.
Liebe Grüße
Erik
Zitat von @Dbgrox:
Ich kann dir auch den Link schicken, ich kann leider sonst selber nicht mehr helfen.
https://m117996:cXTIqD6dzt9TO0JhFb-QKVR3JQY5C0y430OK8rve6nQ@api.itscope. ...
die datei heisst da product.csv muss aber vor dem download bestätigt werden.
Ich kann dir auch den Link schicken, ich kann leider sonst selber nicht mehr helfen.
https://m117996:cXTIqD6dzt9TO0JhFb-QKVR3JQY5C0y430OK8rve6nQ@api.itscope. ...
die datei heisst da product.csv muss aber vor dem download bestätigt werden.
Das File ist nicht Komma delmited sondern TAB-Delimited, deswegen habe ich oben ja gefragt ob der delimiter stimmt ... aber wenn man Fragen nicht beantwortet ...
-Delimiter "`t"
Import-Csv -path 'C:\Users\api2.csv' -Encoding UTF8 -Delimiter "`t" | ? stockStatus -ne 1 | select puid,ean,manufacturerSKU,marketingtext,keySellingPoints,productFeatures,htmlMainSpecs,htmlSpecs | Export-Csv -Path 'C:\Users\api2.csv' -Delimiter ";" -Encoding UTF8 -NoTypeInformation
Zitat von @Dbgrox:
Okay was muss ich dann an dem Script verändern? Beim ersten -Delimiter "t" rein und weiter?
Okay was muss ich dann an dem Script verändern? Beim ersten -Delimiter "t" rein und weiter?
S. letzter Kommentar oben (Backtick beachten!)
-Delimiter "`t"