Dateien in Ordner verschieben (fast gleiche Benennung) - ersuche euren Rat!
Hallo liebe Community,
ich stehe gerade vor folgender Aufgabenstellung und weiß leider eine Lösung:
Ich habe in einem Ordner sowohl duzende von Dateien, als auch Ordner und ich müsste jede dieser Dateien in den vorgesehenen Ordner verschieben.
Die Ordner haben eine 9stellige Nummer, die Dateien ebenfalls, jedoch endet der Dateiname nicht mit dieser 9stelligen Nummer, sondern es folgen noch einige Zahlen.
Beispiel:
Ordner 123456789
Ordner 885522990
Datei 12345678912
Datei 123456789_cbf
Datei 123456789_07_142
Datei 123456789-place-of_012
Datei 8855229904587
Datei 885522990_4589
Datei 885522990_05_458
usw.
Die Dateien sind unterschiedlich, es handelt sich dabei um .png , .jpg , .tif , .pdf , .psd , ja sogar .docx und .xls sind dabei.
Nun habe ich das bisher sehr aufwendig gelöst, in dem ich ganz konventionell/händisch in diesem Ordner, in dem sich sowohl die Ordner als auch die Dateien befinden, eine Suche gestartet habe beispielswiese "123456789" und hier bekam ich sowohl den Ordner, als auch die Dateien angezeigt und markierte dann die angezeigten Dateien und verschob Sie in den Ordner......
Leider sind es hunderte solcher ordner und tausende von Dateien
könnte mir vielleicht jemand einen Ratschlag geben, wie ich dies mit weniger Aufwand bewerkstelligen könnte?
Vielleicht mit einer Batch.... oder vielleicht gibt es einen Kniff in Windows11 den ich noch nicht kenne?
Ich wäre euch wirklich sehr dankbar.
LG
ich stehe gerade vor folgender Aufgabenstellung und weiß leider eine Lösung:
Ich habe in einem Ordner sowohl duzende von Dateien, als auch Ordner und ich müsste jede dieser Dateien in den vorgesehenen Ordner verschieben.
Die Ordner haben eine 9stellige Nummer, die Dateien ebenfalls, jedoch endet der Dateiname nicht mit dieser 9stelligen Nummer, sondern es folgen noch einige Zahlen.
Beispiel:
Ordner 123456789
Ordner 885522990
Datei 12345678912
Datei 123456789_cbf
Datei 123456789_07_142
Datei 123456789-place-of_012
Datei 8855229904587
Datei 885522990_4589
Datei 885522990_05_458
usw.
Die Dateien sind unterschiedlich, es handelt sich dabei um .png , .jpg , .tif , .pdf , .psd , ja sogar .docx und .xls sind dabei.
Nun habe ich das bisher sehr aufwendig gelöst, in dem ich ganz konventionell/händisch in diesem Ordner, in dem sich sowohl die Ordner als auch die Dateien befinden, eine Suche gestartet habe beispielswiese "123456789" und hier bekam ich sowohl den Ordner, als auch die Dateien angezeigt und markierte dann die angezeigten Dateien und verschob Sie in den Ordner......
Leider sind es hunderte solcher ordner und tausende von Dateien
könnte mir vielleicht jemand einen Ratschlag geben, wie ich dies mit weniger Aufwand bewerkstelligen könnte?
Vielleicht mit einer Batch.... oder vielleicht gibt es einen Kniff in Windows11 den ich noch nicht kenne?
Ich wäre euch wirklich sehr dankbar.
LG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3785055628
Url: https://administrator.de/forum/dateien-in-ordner-verschieben-fast-gleiche-benennung-ersuche-euren-rat-3785055628.html
Ausgedruckt am: 20.04.2025 um 19:04 Uhr
17 Kommentare
Neuester Kommentar
hi
mit Powershell eine Kleinigkeit.
Schmier das da in die ISE (Unter Start ISE eingeben):
Vorrausgesetzt das die Dateinamen immer entsprechend dem Ordnernamen beginnen und es da keine überschneidungen gibt mit kürzeren Ordnernamen, also 12345 und 1234.
Dann müsste man das ganze ein bisschen genauer machen
mit Powershell eine Kleinigkeit.
Schmier das da in die ISE (Unter Start ISE eingeben):
$source = "C:\temp\test"
gci $source -Directory | % {
#Write-Host "Folder: $($_.Name)"
gci $source -File -Filter "$($_.name)*" | Move-Item -Destination $_.FullName
}
Dann müsste man das ganze ein bisschen genauer machen

$root = 'd:\data'
Get-Childitem $root -File | ?{$_.Basename -match '.{9}'} | group {$matches} | %{$_.Group | Move-Item -Destination (md "$root\$($_.Name)" -Force).Fullname}
Zitat von @Crusher79:
Ggf. noch $source mit $base ersetzen? Oder andersrum. Damit der angegebene Folder auch Verwendung findet?
Ggf. noch $source mit $base ersetzen? Oder andersrum. Damit der angegebene Folder auch Verwendung findet?
Ups ja danke.
Hallo, die erste Lösung nutzt als "Leitdaten" die Ordner. Die andere "von - bis" und schneidet den Rest des Dateinamens ab.
Es geht kurz darum die Ordner und Dateien zu vergleichen. Am einfachsten ist es die Ordnernamen zu nehmen. $_.name an der Stelle lässt c:\...\ weg und du hast nu den Ordner. Wie man es auch "lesen" würde. Dann wird geschaut welche Dateien mit diesen Worten anfangen. Durch den * werden - wie in vielen Bereichen gewohnt - nichts weiter, 1 Buchstabe/ Zahl oder mehrere gefunden.
Also genau was du willst. Der Anfang ist gleich den Ordnernamen, der Rest egal. Genau immer diese eine Treffer wird dann in den Ordner kopiert. Fertig.
Die 2. Variante ist etwas komplizierter. Weil wir aber was eindeutiges zum Vergleichen haben würde ich auch die erste Lösung vorziehen. Im Prinzip wäre die Übersetzung exakt das, was du verlangst!
Es geht kurz darum die Ordner und Dateien zu vergleichen. Am einfachsten ist es die Ordnernamen zu nehmen. $_.name an der Stelle lässt c:\...\ weg und du hast nu den Ordner. Wie man es auch "lesen" würde. Dann wird geschaut welche Dateien mit diesen Worten anfangen. Durch den * werden - wie in vielen Bereichen gewohnt - nichts weiter, 1 Buchstabe/ Zahl oder mehrere gefunden.
Also genau was du willst. Der Anfang ist gleich den Ordnernamen, der Rest egal. Genau immer diese eine Treffer wird dann in den Ordner kopiert. Fertig.
Die 2. Variante ist etwas komplizierter. Weil wir aber was eindeutiges zum Vergleichen haben würde ich auch die erste Lösung vorziehen. Im Prinzip wäre die Übersetzung exakt das, was du verlangst!
$base= "C:\temp\test" <<< Ordner mit Unterordnern und Dateien!
gci $base -Directory | % { <<< Für jeden ORDNER wird etwas gemacht
#Write-Host "Folder: $($_.Name)" <<< Hilfestellung - würde ohne den hash # einfach den Ordnernamen zeigen
gci $source -File -Filter "$($_.name)*" | Move-Item -Destination $_.FullName <<< Holt sich alle DATEIEN und zeigt nur die an/ macht nur was mit denen, deren Name mit den Ordner Namen beginnt
Genau der Treffer wird dann mit Move-Item in den den Ordner kopiert
}
Zitat von @hpoperator:
Also ich nutze nun folgenden Code:
Nein DEN bitte nicht kenne mich mit Powershell nicht aus und weiß auch nicht wie ich das nutzen kann.
Könnte mir das final noch jemand erklären?
Starte einfach ISE und kopiere den Code da in den Editor-Bereich und passe den Pfad an.Könnte mir das final noch jemand erklären?
Jetzt kannst du alles mit F5 ausführen oder mit F8 einzelne Markierte Befehle bzw Bereiche. Also Markiere mal GCI und drücke F8. Dann führt er GCI aus.
GCI ist das Kürzel für Get-ChildItem und das Listet halt Dateien und Ordner auf
Variable SOURCE definieren mit dem Pfad in dem der ganze Spass liegt
$source = "C:\temp\test"
Alle Ordner in dem Pfad auflisten und in einer Schleife einzeln durchlaufengci $source -Directory | % {
Bei Bedarf das # entfernen, dann gibt er den Aktuellen Ordnernamen aus. mit dem # Davor wird die Zeile ignoriert#Write-Host "Folder: $($_.Name)"
Jedes mal wenn ein Schleifendurchlauf erfolgt werden Alle Dateien aufgelistet die wie der Ordnername beginnt. Jede dieser Dateien wird dann in den entsprechenden Ordner verschobengci $source -File -Filter "$($_.name)*" | Move-Item -Destination $_.FullName
}
}
Ich sagte doch, nimm den NEUEN Code 
Du musst $base mit $source austauschen
Du musst $base mit $source austauschen
$source = "C:\Users\andre\Desktop\Spielwaren-Shop\Artikeldaten\Simba Dickie BIG\Neuer Ordner"
gci $source -Directory | % {
#Write-Host "Folder: $($_.Name)"
gci $source -File -Filter "$($_.name)*" | Move-Item -Destination $_.FullName
}