[Powershell] Files aus Unterordnern sammeln und nach Ordner benennen

mahatma andi

Cadet 4th Year
Registriert
Jan. 2007
Beiträge
97
Hallo zusammen,

ich hab hier grad einen Ordner mit einigen Unterordnern, aus denen ich alle Bilder extrahieren soll. Unter Unix käme ich damit klar aber auf dem Windows-PC, den ich aktuell benutze, muss ich mir mit powershell was zusammenbasteln.
Bis jetzt habe ich das:

Code:
$destination = ".\Bilder"

if (Test-Path $destination) 
{echo "Zielordner existiert"}
else 
{echo "Zielordner existiert nicht, wird nun erstellt"
md $destination}

$files = get-childitem -recurse -include *.jpg 


$files| copy-item -destination {$destination + "\" + $_.Directory.Parent.Parent.Parent + 

$_.Directory.Parent.Parent +$_.Directory.Parent + $_.Directory.Name + $_.Name}

Also es soll alle *jpg finden in Unterordnern und diese dann in den Ordner "Bilder" verschieben und im Filenamen den Path angeben. Das ist momentan extrem hässlich gelöst, aber zumindest Zweckmässig: ich brauche einzig den obersten Ordner im Filenamen, der aktuell immerhin noch drin ist, aber mit den Unter und evtl. Überordnern, die ich gar nicht brauche:

Ordner1/unterordnern/unterunterordner/.../bild1.jpg
Ordner1/unterordner/bild2.jpg
Ordner2/unterordner/.../bild3.jpg
usw.

soll zu:
Bilder/Ordner1bild1.jpg
Bilder/Ordner1bild2.jpg
Bilder/Ordner2bild3.jpg

werden.

Kann mir da wer noch helfen?

Danke, cheers,
mahatma
 
Warum ersetzt du nicht einfach den durchsuchenden Pfad im Gefundenen?
Code:
$src = "pfad xy"
$dest = "neuer pfad"
#...
$files | % {
  cp $_ (Join-Path $dest ($_ -replace $src ''))
}
(ungetestet, kann auch $_ -replace $src,'' gewesen sein)

So schneidest du immer den durchsuchenden Pfad vorn ab und hast dann nur noch die Unterordner + Dateinamen drin.
 
Danke schonmal.

Was soll denn bei $src rein? Also eigentlich will ich ja, wenn ich etwas habe wie ordner1/ordner2/ordner3/ordner4/file, dass ordner2 bis ordner3 rausgeschnitten werden. $src müsste dann ja "ordner2/ordner3" sein, wenn ich das richtig sehe und über die weiss ich a priori nichts.
 
Ja $src wäre eben der zu durchsuchende Pfad und $dest der Pfad, wo alles hinkopiert werden soll. Du kannst in $src auch . reinschreiben für den aktuellen Pfad. Den absoluten Pfad kannst du dir dann mittels Resolve-Path $src holen und über .Path ansprechen.
 
Zurück
Oben