akeipra
Goto Top

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)

Content-Key: 306660

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

Printed on: April 25, 2024 at 04:04 o'clock

Mitglied: 129413
129413 Jun 09, 2016 updated at 13:45:34 (UTC)
Goto Top
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
Member: Akeipra
Akeipra Jun 09, 2016 updated at 14:20:10 (UTC)
Goto Top
Ja super danke! - Das sollte keine Aufforderung sein, eine Dienstleistung umsonst zu bekommen... Ich bin ja schon dabei mir sowas zusammenzubasteln... Werde mir deine Tutorials da nachher mal in Ruhe anschauen.

Sollte ich allerdings Fragen haben, dann darf ich doch nochmal explizieter nachfragen oder face-smile?

Achso, ist es für mich wichtig ob Powershell 1,2,3 oder 4?


Edit:Sorry: Muss ja einen genauen Einstieg finden. Hab 0 Erfahrung im Skripten/Programmieren
Mitglied: 129413
129413 Jun 09, 2016 updated at 14:47:41 (UTC)
Goto Top
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.
Member: colinardo
colinardo Jun 09, 2016, updated at Jun 10, 2016 at 06:29:39 (UTC)
Goto Top
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)
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  
Viel Erfolg
Grüße Uwe
Member: AnkhMorpork
AnkhMorpork Jun 10, 2016 at 06:21:12 (UTC)
Goto Top
Zitat von @129413:

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 ...
Member: colinardo
colinardo Jul 15, 2016 at 16:41:43 (UTC)
Goto Top
Kommt hier noch was ?
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.