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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 251050
Url: https://administrator.de/contentid/251050
Ausgedruckt am: 22.11.2024 um 17:11 Uhr
3 Kommentare
Neuester Kommentar
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 ; )
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 ; )