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-Key: 301085

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

Printed on: April 18, 2024 at 20:04 o'clock

Mitglied: 114757
Solution 114757 Apr 07, 2016 updated at 09:12:29 (UTC)
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
Member: xyxy-yx
xyxy-yx Apr 07, 2016 at 18:16:43 (UTC)
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 
Mitglied: 114757
114757 Apr 07, 2016 updated at 18:33:11 (UTC)
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.
Member: xyxy-yx
xyxy-yx Apr 08, 2016 at 16:29:09 (UTC)
Goto Top
Habe jetzt auf PowerShell 5.0 geupdatet, jetzt funktioniert es wunderbar.
besten Dank