arator65
Goto Top

Viele Dateien in Unterverzeichnisse verschieben (automatisiert)

Hallo zusammen,

ich habe Verzeichnisse mit Fotos, zum Teil sind da bis zu 15.000 Fotos in einem Verzeichnis.

Nun möchte ich diese Vielzahl an Bildern in Unterverzeichnisse mit jeweils 1000 oder 1500 Fotos verschieben.
Das Ursprungsverzeichnis soll also nach Ausführen des Skripts/Tools mehrere Unterverzeichnisse haben (part1, part2, part3, ...) in denen jeweils eine definierte Anzahl an Fotos enthalten ist.

Schön wäre, wenn das Tool nix tun würde, wenn weniger als die maximale Anzahl pro Unterverzeichnis vorhanden ist face-smile

Geht das mit einem Skript, gibt es dafür ein Tool, oder hat jemand eine andere Idee ?

Danke schon mal

Content-Key: 229807

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

Printed on: April 26, 2024 at 21:04 o'clock

Member: colinardo
colinardo Feb 14, 2014, updated at Jun 27, 2014 at 16:20:47 (UTC)
Goto Top
Hallo arator65, Willkommen im Forum!
Ich hatte dazu mal vor einiger Zeit ein Powershell-Script geschrieben, das Dateien gleichmäßig auf Unterordner verteilt:
Das Script verteilt Dateien in gleichen Teilen gleichmäßig auf Unterordner. Der Ordner in dem die Dateien liegen gibt man in Zeile 1 an (ohne Backslash am Ende) und die gewünschte Anzahl der Dateien in jedem Ordner, in Zeile 2. Die Dateien werden dann in Unterordner mit Namen part1 , part2 , etc. verschoben.
$folder = "D:\Bilder"  
$splitNum = 1000
$items = dir "$folder\*.*" | ?{!$_.PSIsContainer}  
$folderCount = [Math]::floor(($items.Count / $splitNum))
if (($items.Count) -ge $splitNum ){
    for ($i=0;$i -lt $folderCount ; $i++){
        $subFolder = "$folder\part$($i+1)"  
        if (!(Test-Path -Path $subFolder)){ mkdir $subFolder}
        for ($j=$i*$splitNum;$j -lt ($i*$splitNum)+$splitNum ; $j++){
            $items[$j].MoveTo("$subFolder\$($items[$j].Name)")  
        }
    }
}else{
    write-host "Im Ordner $folder sind nur $($items.Count) Dateien enthalten! Eine Aufsplittung zu je $splitNum Dateien ist daher nicht möglich."  
}
Der Rest der Bilder der nicht mehr ganzzahlig durch die Anzahl (1000) teilbar ist, verbleibt im Ordner, so wie du das wolltest.

Grüße Uwe

p.s. wenn du noch nie mit Powershell-Scripten zu tun hattest, hier ergänzend noch eine Kurzanleitung dazu wie man solche Scripte ausführt:
back-to-topAnleitung: Wie starte ich Powershell-Scripte
  • Zuerst speicherst man den Code in einer Textdatei mit der Endung .ps1.
  • Wenn man zum ersten mal Powershell-Scripte ausführt, musst man einmalig vorher noch das Ausführen von Scripten freischalten. Dazu öffnet man eine Powershell-Konsole und gibt dort den Befehl Set-ExecutionPolicy RemoteSigned -Force ein. Um diese Policy für alle User auf dem Rechner zu setzen muss man diesen Befehl in einer Powershell-Konsole mit Admin-Rechten starten. Noch ein Hinweis für 64-Bit-Systeme: Hier sollte sowohl für die 32bit und 64Bit Variante der Powershell die Policy in einer Admin-Konsole gesetzt werden: Set-ExecutionPolicy RemoteSigned -Force; start-job { Set-ExecutionPolicy RemoteSigned -Force } -RunAs32
  • Jetzt kann das Powershell-Script in der Konsole mit Eingabe des Pfades der Scriptdatei, oder mit einem Rechtsklick auf die Script-Datei :Mit Powershell ausführen gestartet werden.