tkt2208
Goto Top

Via CMD Dateien in Ordner sortieren

Hallo zusammen,

ich habe in einem Ordner sehr viele Dateien mit gleichem Namen die sich nur am Ende durch eine Zahl unterscheiden.
zB.
Bild 1.*
Bild 2.*
Bild 3.*

Bilder 1.*
Bilder 2.*
Bilder 3.*

Ich möchte diese via CMD in einen Ordner verschieben der den Namen der Dateinen trägt aber ohne die Zahl am Ende der Datei. Also soll die CMD einen Ordner erstellen der z.B. "Bild" heißt und alle Dateien die mit Bild beginnen dort hinein verschoben werden. Und das ganze natürlich auch für Bilder.

Ich hoffe Ihr könnt meinen Ausführungen folgen und mir bei der Lösung meiner Aufgabe behilflich sein.

Mit freundlichen Grüßen der tkt

Content-ID: 294089

Url: https://administrator.de/forum/via-cmd-dateien-in-ordner-sortieren-294089.html

Ausgedruckt am: 18.04.2025 um 06:04 Uhr

Friemler
Friemler 24.01.2016 um 13:42:37 Uhr
Goto Top
Hallo tkt,

wie viel Aufwand man in Batchscript treiben muss, um die Dateinamen in ihre Bestandteile zu zerlegen, hängt sehr davon ab, wie die Dateinamen genau aufgebaut sind.

  1. Ist der erste Namensteil immer durch ein Leerzeichen von der Zahl getrennt?
  2. Kann der erste Namensteil auch Leerzeichen und/oder Ziffern enthalten?

Gruß
Friemler
114757
114757 24.01.2016 aktualisiert um 16:23:22 Uhr
Goto Top
Powershell:
$quelle = 'c:\quelle'  
$ziel = 'c:\ziel'  
gci $quelle -recurse | ?{!$_.PSisContainer} | %{
    $dest = "$ziel\$($_.Basename -replace '(.*?)[\s\d]*$','$1')"  
    if(!(Test-Path $dest)){md $dest}
    move-item $_.Fullname -destination $dest
}

Gruß jodel32
tkt2208
tkt2208 24.01.2016 aktualisiert um 15:53:52 Uhr
Goto Top
Zitat von @114757:

Powershell:
> $quelle = 'c:\quelle'  
> $ziel = 'c:\ziel'  
> gci $quelle -recurse | ?{!$_.PSisContainer} | %{
>     $dest = "$ziel\$($_.Basename -replace '(.*)\s?\d*$','$1')"  
>     if(!(Test-Path $dest)){md $dest}
>     move-item $_.Fullname -destination $dest
> }
> 

Dieses erstellt für jede Datei einen Ordner also Bild 1, Bild 2, Bild 3, Bilder 1, Bilder 2, Bilder 3,

ich benötige aber nur Bild und Bilder


Zitat von @Friemler:
  1. Ist der erste Namensteil immer durch ein Leerzeichen von der Zahl getrennt?
  2. Kann der erste Namensteil auch Leerzeichen und/oder Ziffern enthalten?

der Namensteil kann auch Leerzeichen enthalt die Zahl ist aber immer mit Leerzeichen vom Namensteil getrennt z.B.
Bild 1
Bild Bild 2
Bild Bild Bild 3
114757
114757 24.01.2016 aktualisiert um 15:57:21 Uhr
Goto Top
Dieses erstellt für jede Datei einen Ordner also Bild 1, Bild 2, Bild 3, Bilder 1, Bilder 2, Bilder 3,

Falsch, mein Skript erstellt nur Ordner mit Namen ohne die Zahlen am Ende ...und schiebt die jeweilig zugehörigen Files dort rein ...
tkt2208
tkt2208 24.01.2016 aktualisiert um 16:10:30 Uhr
Goto Top
Zitat von @114757:
Falsch, mein Skript erstellt nur Ordner mit Namen ohne die Zahlen am Ende ...und schiebt die jeweilig zugehörigen Files dort rein ...

dann muss ja irgendetwas falsch gemachen haben weil er bei mir die Ordner Bild 1, Bild 2, Bild 3, Bilder 1, Bilder 2, Bilder 3 erstellt hat und dann die Dateien hinein verschoben hat.

aber was habe ich falsch gemacht ?
114757
114757 24.01.2016 aktualisiert um 16:11:35 Uhr
Goto Top
Zitat von @tkt2208:
aber was habe ich falsch gemacht ?
Du hast meinen Code in einer früheren Version kopiert, ich hatte den Regex kurz hinterher nochmal korrigiert.
tkt2208
tkt2208 24.01.2016 um 16:16:37 Uhr
Goto Top
Zitat von @114757:
Du hast meinen Code in einer früheren Version kopiert, ich hatte den Regex kurz hinterher nochmal korrigiert.

ich habe es jetzt noch einmal kopiert es bleibt aber unverändert.
114757
114757 24.01.2016 aktualisiert um 16:32:24 Uhr
Goto Top
Zitat von @tkt2208:
ich habe es jetzt noch einmal kopiert es bleibt aber unverändert.
Kann ich nicht bestätigen klappt hier einwandfrei!

Zeile 4 muss exakt so lauten:
 $dest = "$ziel\$($_.Basename -replace '(.*?)[\s\d]*$','$1')" 
tkt2208
tkt2208 24.01.2016 aktualisiert um 16:42:59 Uhr
Goto Top
Zitat von @114757:
>  $dest = "$ziel\$($_.Basename -replace '(.*?)[\s\d]*$','$1')" 

Vielen Dank jetzt funktioniert es.

Nur noch eine Frage ?

Muss ich immer eine Quelle und Ziele angeben oder ist es auch möglich das immer der Quell und Zielpfad das Verzeichnis ist in dem die Powershell Datei liegt und gestartet wird ?
114757
114757 24.01.2016 aktualisiert um 16:59:32 Uhr
Goto Top
Zitat von @tkt2208:
Muss ich immer eine Quelle und Ziele angeben oder ist es auch möglich das immer der Quell und Zielpfad das Verzeichnis ist in dem die Powershell Datei liegt und gestartet wird ?
Nein natürlich nicht, das war ja nur deinem Verständnis halber so gestaltet.

In dem Fall so, das Skript selber muss dann ja vom Verschieben ausgenommen werden (-Exclude *.ps1) face-wink
$path = $PSScriptRoot
gci $path -recurse -Exclude *.ps1 | ?{!$_.PSisContainer} | %{
    $dest = "$path\$($_.Basename -replace '(.*?)[\s\d]*$','$1')"  
    if(!(Test-Path $dest)){md $dest}
    move-item $_.Fullname -destination $dest
}

Wichtiger Hinweis: Wenn noch Powershell Version 2 benutzt wird, muss Zeile 1 so lauten:
$path = Split-Path $MyInvocation.MyCommand.Definition -Parent