zerberus
Goto Top

PowerShell und Get-ChildItem - Dateien eine Ebene höher schieben

Guten Tag,

ich habe folgendes Problem welches ich gerne mit PowerShell lösen möchte. In einem Ordner existieren 400 Ordner, jeweils mit einem Unterordner. Die Unterordner haben immer den Namen "NEF" für Nikon Electronic Format. In diesen Unterordnern liegen als meine NEF-Dateien und je ein Jpeg und XML-File. Diese Dateien sind immer wie der oberste Ordner benannt, also zum Beispiel "Urlaub Karibik 2014". Ich muss nun in jedem Ordner das XML und das JPEG eine ebene höher schieben, also raus aus dem Ordner NEF in den Ordner "Urlaub Karibik 2014". Wie kann ich das realisieren?

Vorab herzlichen Dank

Content-Key: 251050

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

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

Member: colinardo
Solution colinardo Oct 06, 2014, updated at Oct 07, 2014 at 07:08:15 (UTC)
Goto Top
Hallo zerberus,
nichts leichter als das face-smile
dir 'c:\bilderordner\*\NEF\*' -Include "*.xml","*.jpg" -Recurse | move-item -Destination {$_.Directory.Parent.FullName} -Force
Grüße Uwe
Member: kurbach
kurbach Oct 06, 2014 updated at 14:19:11 (UTC)
Goto Top
Hier mal einige infos, wie dus dir zusammenstückeln kannst:
Alles was du suchst findest du in diesem Beispiel:
http://gallery.technet.microsoft.com/scriptcenter/PowerShell-Rename-Fil ...
Das musst du nur noch weiter anpassen.
"rename-item" kannste vergessen, dein Befehl der Wahl lautet dann "move-item", das ziel lautet für jede datei "..\"
Damit sollteste dein skript schreiben können.
Hth,
Kay

~# get-help mi -examples
liefert in Beispiel 4 folgenden output:

C:\PS>get-childitem -path . -recurse -include *.txt | move-item -destination C:\TextFiles

Beschreibung
Mit diesem Befehl werden alle Textdateien aus dem aktuellen Verzeichnis und rekursiv aus allen Unterverzeichnissen in das Verzeichnis "C:\TextFiles" verschoben.
Im Befehl werden mit dem Cmdlet "Get-ChildItem" alle untergeordneten Elemente im aktuellen Verzeichnis (dargestellt durch den Punkt [.]) und dessen Unterverzeichnissen abgerufen, die die Dateinamenerweiterung "*.txt" aufweisen. Mit dem Recurse-Parameter wird ein rekursiver Abrufvorgang festgelegt, und mit dem Include-Parameter wird der Abrufvorgang auf Dateien im Format "*.txt" beschränkt.
Mit dem Pipelineoperator (|) werden die Ergebnisse dieses Befehls an Move-Item übergeben, mit dem die Textdateien in das Verzeichnis "C:\TextFiles" verschoben werden.
Wenn nach "C:\TextFiles" verschobene Dateien denselben Namen aufweisen, wird von Move-Item ein Fehler angezeigt und der Vorgang fortgesetzt, es wird jedoch nur eine Datei mit dem betreffenden Namen in das Verzeichnis "C:\TextFiles" verschoben. Die anderen Dateien verbleiben in ihren ursprünglichen Verzeichnissen.
Wenn das Verzeichnis "Textfiles" (oder ein anderes Element des Zielpfads) nicht vorhanden ist, tritt bei dem Befehl ein Fehler auf. Das fehlende Verzeichnis wird nicht erstellt, auch wenn Sie den Force-Parameter verwenden. Move-Item verschiebt das erste Element in die eine Datei mit dem Namen "Textfiles" und zeigt dann einen Fehler mit der Meldung an, dass die Datei bereits vorhanden ist.
Zudem werden mit Get-ChildItem standardmäßig keine versteckten Dateien verschoben. Um versteckte Dateien zu verschieben, verwenden Sie Get-ChildItem mit dem Force-Parameter.

get-help ist dein Freund ; )
Member: zerberus
zerberus Oct 07, 2014 updated at 07:33:36 (UTC)
Goto Top
Ich möchte mich an dieser Stelle ganz herzlich bei Euch beiden für eure Hilfe bedanken. Dies hat mir einige Stunden Arbeit gespart. Vielen Dank!