PowerShell: Aulesen einer CSV + verschieben von Dateien
Hallo erstmal, ich bin hier komplett neu und auch kein profi im skripten.
Allerdings bräuchte ich ein kleines Skript:
1. Starten: Skript soll eine CSV auslesen in der Nummern stehen, zu jeder nummer gibt es auch Bilder die sich folgendermaßen aufbauen:
CSV bsp.:
[Nummern]
123456
123457
123458
123459
Bilder:
123456_F; 123456_R; 123456_L, 123456_T; 123456_U [Es kann aber auch _S sein]
123457..."
123458..."
123459..."
Da die Bilder später unterschiedlich skaliert werden müssen, müssen diese vorher in seperate Ordner geschoben werden oder es dient zur Kontrolle ob ein Bild mit einem _X fehlt.
2. Skript soll Ordner erstellen: JPG => F,R,K,T,U,B,S & PNG => F,R,K,T,U,B,S (2 Ordner und jeweils 7 Unterordner)
3. Das Skript soll nun schauen ob es z.b Nummer: 123456_F/_R/_L/_T/_U gibt und dann in die dementsprechenden Ordner Kopieren. Sollte eins fehlen so erstelle eine neue CSV und schreibe:
[Nummer] [fehlt]
123456 _R
falls jemand ne übersichtlicher Lösung hat, wäre das auch ok
usw...
Fazit: Das Skript soll eine Liste auslesen die jeweils eine _(Variable) haben und sollte diese in die richtigen Ordner verschieben, die das Skript zuvor erstellt hat. Sortiere dabei nach JPG und PNG
Falls Fragen sind versuch ich es nochmal zu erklären:
Leider bin ich bisher nur soweit gekommen dass ich Ordne erstellen lassen kann ( aber nur mit Pfad angabe ) und dass Bilder kopiert werden ( auch nur von festen Pfad zu Ziel Pfad )
Hintergrund: Jede Nummer ist ein Produkt das überwiegend aus einem Karton mit 6 Bilder besteht. Diese werden bearbeiten und als Nummer_F usw...abgespeichert.
F = Front Side
R = Right Side
L = Left Side
T = Top
U = Under
B = Back
S = Shape (UV Map)
Allerdings bräuchte ich ein kleines Skript:
1. Starten: Skript soll eine CSV auslesen in der Nummern stehen, zu jeder nummer gibt es auch Bilder die sich folgendermaßen aufbauen:
CSV bsp.:
[Nummern]
123456
123457
123458
123459
Bilder:
123456_F; 123456_R; 123456_L, 123456_T; 123456_U [Es kann aber auch _S sein]
123457..."
123458..."
123459..."
Da die Bilder später unterschiedlich skaliert werden müssen, müssen diese vorher in seperate Ordner geschoben werden oder es dient zur Kontrolle ob ein Bild mit einem _X fehlt.
2. Skript soll Ordner erstellen: JPG => F,R,K,T,U,B,S & PNG => F,R,K,T,U,B,S (2 Ordner und jeweils 7 Unterordner)
3. Das Skript soll nun schauen ob es z.b Nummer: 123456_F/_R/_L/_T/_U gibt und dann in die dementsprechenden Ordner Kopieren. Sollte eins fehlen so erstelle eine neue CSV und schreibe:
[Nummer] [fehlt]
123456 _R
falls jemand ne übersichtlicher Lösung hat, wäre das auch ok
usw...
Fazit: Das Skript soll eine Liste auslesen die jeweils eine _(Variable) haben und sollte diese in die richtigen Ordner verschieben, die das Skript zuvor erstellt hat. Sortiere dabei nach JPG und PNG
Falls Fragen sind versuch ich es nochmal zu erklären:
Leider bin ich bisher nur soweit gekommen dass ich Ordne erstellen lassen kann ( aber nur mit Pfad angabe ) und dass Bilder kopiert werden ( auch nur von festen Pfad zu Ziel Pfad )
Hintergrund: Jede Nummer ist ein Produkt das überwiegend aus einem Karton mit 6 Bilder besteht. Diese werden bearbeiten und als Nummer_F usw...abgespeichert.
F = Front Side
R = Right Side
L = Left Side
T = Top
U = Under
B = Back
S = Shape (UV Map)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 306660
Url: https://administrator.de/contentid/306660
Ausgedruckt am: 22.11.2024 um 20:11 Uhr
6 Kommentare
Neuester Kommentar
Allerdings bräuchte ich ein kleines Skript:
Wo wir dabei sind, ich brauch noch 2 Liter Milch, 1kg Mehl und 10 Eier vom Aldi, wenn du mir das dann noch vorbei bringen könntest wäre das super!Fazit: Windows PowerShell 3.0 für Einsteiger - Teil 1
Import-CSV
Test-Path
Get-ChildItem
Move-Item
Export-CSV
Gruß skybird
Achso, ist es für mich wichtig ob Powershell 1,2,3 oder 4?
Jacke wie Hose, die Grundlagen sind bei allen gleich, mit jedem Versionssprung sind halt ein paar neue Funktionen und Parameter hinzugekommen die aber nicht lebensnotwendig sind.Der Sprung 2.0->3.0 war IMHO der Größte.
Hallo Akeipra , Willkommen auf Administrator.de!
Auf die Gefahr hin das ich dich jetzt mit meinem Skript überfordere, poste ich es trotzdem vielleicht kannst du es während deiner Powershell-Lernphase Stück für Stück zerpflücken. Ich habe die Schritte weitgehend für dich kommentiert.
Ich gehe von einer CSV-Datei aus die so aussieht
(Wichtig: inkl. ^der exakt benannten Spaltenüberschrift, da ich damit im Code auf die Spalte mit dem Namen zugreife / Man kann es natürlich auch ohne machen, nur muss das Skript dann wieder angepasst werden, deshalb für die Demo jetzt mal so einrichten)
Viel Erfolg
Grüße Uwe
Auf die Gefahr hin das ich dich jetzt mit meinem Skript überfordere, poste ich es trotzdem vielleicht kannst du es während deiner Powershell-Lernphase Stück für Stück zerpflücken. Ich habe die Schritte weitgehend für dich kommentiert.
Ich gehe von einer CSV-Datei aus die so aussieht
(Wichtig: inkl. ^der exakt benannten Spaltenüberschrift, da ich damit im Code auf die Spalte mit dem Namen zugreife / Man kann es natürlich auch ohne machen, nur muss das Skript dann wieder angepasst werden, deshalb für die Demo jetzt mal so einrichten)
Nummern
111111
222222
333333
444444
# Pfad in dem die Bilder liegen (dort werden auch die Ordner JPG und PNG inkl. Unerordner erstellt)
$folder = 'C:\akeipra\bilder'
# CSV-Datei importieren
$csv = Import-CSV 'A:\akeipra\nummern.csv' -Delimiter ";"
# Ordner Struktur festlegen
$subfolders = @{
"PNG" = 'FRLTUBS'.ToCharArray()
"JPG" = 'FRLTUBS'.ToCharArray()
}
# Ordner anhand der Struktur erstellen
$subfolders.GetEnumerator() | %{$format = $_.Key; $_.Value | %{md "$folder\$format\$_" -Force -EA Ignore | out-null}}
# Alle Bilder anhand Ihrer Nummer und Ansicht gruppieren und in die passenden Ordner verschieben
$groups = gci "$folder\*" -File -Include *.png,*.jpg -Recurse | ?{$_.Basename.Split('_') -in $csv.Nummern} | group {"$($_.Extension.Substring(1))\$($_.BaseName.Split('_')[1])"} | %{move-item $_.Group -Destination "$folder\$($_.Name) -Force"}
# (InMemory)-Spalte zur CSV für den Status hinzufügen
$csv | Add-Member -MemberType NoteProperty -Name 'Missing' -Value ""
# Prüfe Versionen die nicht vorhanden sind und schreibe sie in einen neue Spalte 'Missing'
foreach($line in $csv){
$subfolders.GetEnumerator() | %{
$format = $_.Key
$_.Value | %{
if (!(Test-Path "$folder\$format\$_\$($line.Nummern)_$_.$format")){$line.Missing += "$($format)($_) "}
}
}
}
# Schreibe das Ergebnis in eine neue CSV-Datei
$csv | export-csv "$folder\ergebnis.csv" -NoType -Delimiter ";" -Encoding UTF8
Grüße Uwe
Zitat von @129413:
Der Sprung 2.0->3.0 war IMHO der Größte.
Achso, ist es für mich wichtig ob Powershell 1,2,3 oder 4?
Jacke wie Hose, die Grundlagen sind bei allen gleich, mit jedem Versionssprung sind halt ein paar neue Funktionen und Parameter hinzugekommen die aber nicht lebensnotwendig sind.Der Sprung 2.0->3.0 war IMHO der Größte.
Also zumindest die 1er-Version würde ich aus reiner Seriosität nicht mehr empfehlen - nicht mal einem Novizen.
Die is' schon sehr Asbach ...
Kommt hier noch was ?
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.