xyxy-yx
Goto Top

Datei von einem Ordners alphabetisch sortiert in Unterordnern verschieben

Hallo,

Ich möchte von allen Dateien eines Ordner den ersten Buchstaben auslesen und mittel einer for-Schleife und if-Bedingungen die Dateien dann alphabetisch in Unterordner bzw. anderen Ordner verschieben, wenn diese dort nicht existiert.

zum Beispiel:

abc def - ghi.txt (erster Buchstabe ist A, wenn Datei dort nicht existiert, dann verschiebe in Ordner A)
CccDdd lll.jpg (erster Buchstabe ist C, wenn Datei dort nicht existiert, dann verschiebe in Ordner C)
123 jkf.txt (erster Buchstabe ist 1, wenn Datei dort nicht existiert, dann verschiebe in Ordner 0-9)
[dsj fdsfs.txt (erster Buchstabe ist [, wenn Datei dort nicht existiert, dann verschiebe in Ordner SONSTIGE)

d.h Unterorder sind A, B, C .... X, Y, Z, 0-9 und die Namen können Leerzeichen und Bindestriche beinhalten.

Könnt ihr mir da weiter helfen?

Content-ID: 301085

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

Ausgedruckt am: 26.11.2024 um 04:11 Uhr

114757
Lösung 114757 07.04.2016 aktualisiert um 11:12:29 Uhr
Goto Top
Z.B. mit Powershell:
$targetfolder = 'C:\Ordner'  
gci $targetfolder -Filter '*.*' | group {$_.Name.Substring(0,1)} | %{  
    $first = $_.Name
    switch -Regex ($_.Name){
        '[a-z]'{$target = "$targetfolder\$first"}  
        '\d'{$target = "$targetfolder\0-9"}  
        default{$target = "$targetfolder\SONSTIGE"}  
    }
    if (!(Test-Path $target)){md $target -Force}
    $_.Group | move-item -Destination $target -EA Ignore
}
Gruß jodel32
xyxy-yx
xyxy-yx 07.04.2016 um 20:16:43 Uhr
Goto Top
Hallo jodel32,

Habe dein Skript etwas angepasst:

$targetfolder = 'C:\temp\test\sort'  
$endfolder = 'C:\temp\test'  
gci $targetfolder -Filter '*.*' | group {$_.Name.Substring(0,1)} | %{  
    $first = $_.Name
    switch -Regex ($_.Name){
        '[A-Z]'{$target = "$endfolder\$first"}  
        '\d'{$target = "$endfolder\0-9"}  
        default{$target = "$endfolder\SONSTIGE"}  
    }
    if (!(Test-Path $target)){md $target -Force}
    $_.Group | move-item -Destination $target -EA Ignore
}

Die Ordner, welche nicht vorhanden sind, werden erstellt aber es wird leider aufgrund der Fehlermeldung nichts verschoben.

Aber leider kommt bei mir immer die Fehlermeldung:
Move-Item : Der Parameter "ErrorAction" kann nicht gebunden werden. Der Wert "Ignore" kann aufgr  
und von ungültigen Enumerationswerten nicht in den Typ "System.Management.Automation.ActionPrefe  
rence" konvertiert werden. Geben Sie einen der folgenden Enumerationswerte an, und versuchen Sie  
 es erneut. Mögliche Enumerationswerte sind "SilentlyContinue, Stop, Continue, Inquire".  
Bei C:\temp\test\s.ps1:11 Zeichen:50
+     $_.Group | move-item -Destination $target -EA <<<<  Ignore
    + CategoryInfo          : InvalidArgument: (:) [Move-Item], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.Move 
   ItemCommand 
114757
114757 07.04.2016 aktualisiert um 20:33:11 Uhr
Goto Top
Die Erroraction Ignore gibt's erst ab min. PS3.0 ! Das ist der Grund. Du kannst stattdessen -EA SilentlyContinue verwenden. Dann sollte man die Files aber einzeln auf Existenz im Zielordner checken.
Ich würde aber die PS sowieso mal auf einen aktuellen Stand bringen PS 2.0 hat diverse Bugs und Unzulänglichkeiten.
xyxy-yx
xyxy-yx 08.04.2016 um 18:29:09 Uhr
Goto Top
Habe jetzt auf PowerShell 5.0 geupdatet, jetzt funktioniert es wunderbar.
besten Dank