Batch Sortierung von Ordnern und Dateien nach Teil vom Namen
Hallo in die Runde,
ich hoffe Ihr könnt mich bei einem Sortier-Problem unterstützen.
Ich habe nahezu täglich eine Ordnerstruktur, die umsortiert werden muss und hoffe das mit einer Batch gelöst zu bekommen.
Anfangsstruktur sieht so aus
Beispiel-Ordner :
20230821_XXXXXX (Ordner)
.└ Dokument (Ordner)
..└ C_P_111111_20230821.pdf
..└ C_P_222222_20230821.pdf
..└ C_P_333333_20230821.pdf
..└ F_111111_XXXXX.pdf
..└ F_222222_XXXXX.pdf
..└ F_333333_XXXXX.pdf
..└ P_111111_XXXXX.pdf
..└ P_222222_XXXXX.pdf
..└ P_333333_XXXXX.pdf
..└ S_111111_XXXXX.pdf
..└ S_222222_XXXXX.pdf
..└ S_333333_XXXXX.pdf
.└ Test (ordner)
..└ XX-111111(Ordner)
...└ Test_XX-111111_20230821(Ordner mit vielen Dateien und noch Unterordnern)
..└ XX-222222(Ordner)
...└ Test_XX-222222_20230821(Ordner mit vielen Dateien und noch Unterordnern)
..└ XX-333333(Ordner)
...└ Test_XX-333333_20230821(Ordner mit vielen Dateien und noch Unterordnern)
usw.
.└ Vortest(Ordner)
..└ XX-111111(Ordner)
...└ Vortest_XX-111111_20230821(Ordner mit vielen Dateien und noch Unterordnern)
..└ XX-222222(Ordner)
...└ Vortest_XX-222222_20230821(Ordner mit vielen Dateien und noch Unterordnern)
..└ XX-333333(Ordner)
...└ Vortest_XX-333333_20230821(Ordner mit vielen Dateien und noch Unterordnern)
usw.
Die 111111, 222222 usw. stehen für 6stellige Seriennummern und danach soll sortiert werden und dann in einen speziellen Pfad wegkopiert werden.
Anschließend soll es folgende Sturktur haben:
111111 (Ordner)
.└A
.└B
..└ Test
...└ Test_XX-111111_20230821
..└ Vortest
...└ Vortest_XX-111111_20230821
..└ C
..└ D
..└ E
..└ F
..└ L
...└ R
.. ..└ F_111111_XXXXX.pdf
.. ..└ P_111111_XXXXX.pdf
.. ..└ S_111111_XXXXX.pdf
...└ S
Und sobald alle Seriennummern durchsortiert sind in einen Pfad wegkopiert werden. Anschließend kann die bestehende struktur gelöscht werden.
Da ich hier doch Amateur bin, würde ich mich über Eure Unterstützung freuen.
Grüße
ich hoffe Ihr könnt mich bei einem Sortier-Problem unterstützen.
Ich habe nahezu täglich eine Ordnerstruktur, die umsortiert werden muss und hoffe das mit einer Batch gelöst zu bekommen.
Anfangsstruktur sieht so aus
Beispiel-Ordner :
20230821_XXXXXX (Ordner)
.└ Dokument (Ordner)
..└ C_P_111111_20230821.pdf
..└ C_P_222222_20230821.pdf
..└ C_P_333333_20230821.pdf
..└ F_111111_XXXXX.pdf
..└ F_222222_XXXXX.pdf
..└ F_333333_XXXXX.pdf
..└ P_111111_XXXXX.pdf
..└ P_222222_XXXXX.pdf
..└ P_333333_XXXXX.pdf
..└ S_111111_XXXXX.pdf
..└ S_222222_XXXXX.pdf
..└ S_333333_XXXXX.pdf
.└ Test (ordner)
..└ XX-111111(Ordner)
...└ Test_XX-111111_20230821(Ordner mit vielen Dateien und noch Unterordnern)
..└ XX-222222(Ordner)
...└ Test_XX-222222_20230821(Ordner mit vielen Dateien und noch Unterordnern)
..└ XX-333333(Ordner)
...└ Test_XX-333333_20230821(Ordner mit vielen Dateien und noch Unterordnern)
usw.
.└ Vortest(Ordner)
..└ XX-111111(Ordner)
...└ Vortest_XX-111111_20230821(Ordner mit vielen Dateien und noch Unterordnern)
..└ XX-222222(Ordner)
...└ Vortest_XX-222222_20230821(Ordner mit vielen Dateien und noch Unterordnern)
..└ XX-333333(Ordner)
...└ Vortest_XX-333333_20230821(Ordner mit vielen Dateien und noch Unterordnern)
usw.
Die 111111, 222222 usw. stehen für 6stellige Seriennummern und danach soll sortiert werden und dann in einen speziellen Pfad wegkopiert werden.
Anschließend soll es folgende Sturktur haben:
111111 (Ordner)
.└A
.└B
..└ Test
...└ Test_XX-111111_20230821
..└ Vortest
...└ Vortest_XX-111111_20230821
..└ C
..└ D
..└ E
..└ F
..└ L
...└ R
.. ..└ F_111111_XXXXX.pdf
.. ..└ P_111111_XXXXX.pdf
.. ..└ S_111111_XXXXX.pdf
...└ S
Und sobald alle Seriennummern durchsortiert sind in einen Pfad wegkopiert werden. Anschließend kann die bestehende struktur gelöscht werden.
Da ich hier doch Amateur bin, würde ich mich über Eure Unterstützung freuen.
Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 92589148750
Url: https://administrator.de/forum/batch-sortierung-von-ordnern-und-dateien-nach-teil-vom-namen-92589148750.html
Ausgedruckt am: 15.04.2025 um 01:04 Uhr
19 Kommentare
Neuester Kommentar

Powershell etwa so :
Gruß siddius
# Quell-Pfad
$quelle = "D:\quellroot"
# Zielpfad
$ziel = "Z:\zielroot"
# Datum abfragen
$date = read-host "Datum des Ordners eingeben (yyyyMMdd)"
# ordner ermitteln und diesen dann verarbeiten
foreach($folder in Get-ChildItem "$quelle\${date}_*" -Directory){
# Dateien nach SN gruppieren
foreach($filegroup in Get-ChildItem "$($folder.Fullname)\Dokumente" -File -Filter *.pdf | ?{$_.Basename -match '^[FPS]_(\d{6})_'} | group {$matches[1]}){
# SN Ordner inkl. Unterordner erstellen
$destination = "$ziel\$($filegroup.Name)"
if (!(Test-Path $destination)){
New-Item -ItemType Dir -Path $ziel -Name $filegroup.Name -Force | out-null
"A,B,C,D,E".split(",") | %{md "$destination\$_" -Force | out-null}
"Test,Vortest".split(",") | %{md "$destination\B\$_" -Force | out-null}
"A,B,C,D".split(",") | %{md "$destination\E\$_" -Force | out-null}
}
# Dateien in den SN Ordner im Unterordner "\E\C" kopieren
$filegroup.Group | Copy-Item -Destination "$destination\E\C" -verbose
# passende Subordner in "\B\Test" kopieren
Get-ChildItem "$($folder.Fullname)\Vortest\*$($filegroup.Name)" -Directory | Copy-Item -Destination "$destination\B\Vortest" -Recurse -verbose -Force
# passende Subordner in "\B\Vortest" kopieren
Get-ChildItem "$($folder.Fullname)\Test\*$($filegroup.Name)" -Directory | Copy-Item -Destination "$destination\B\Test" -Recurse -verbose -Force
}
# in der nächste Zeile das "-whatif" entfernen um den Ordner dann anschließend tatsächlich löschen zu lassen
remove-item $folder.Fullname -Recurse -Force -whatif
}

Zitat von @Chaefre:
Hier wäre es cool wenn ich zum Beispiel, das Datum des ordners eingegeben könnte mit YYYYDDMM und damit findet er den ordner den er sortieren soll.
Ist oben eingebaut.Hier wäre es cool wenn ich zum Beispiel, das Datum des ordners eingegeben könnte mit YYYYDDMM und damit findet er den ordner den er sortieren soll.
Bisher bekomm ich es noch nicht zum laufen.
Funktioniert hier in meinem Test mit einer Ordnerstruktur nach deinem Schema einwandfrei.Hier mein Ergebnis:

Zitat von @Chaefre:
foreach($folder in Get-ChildItem "$quelle\$(get-date -f yyyyMMdd)_*\Dokument" -Directory
Hier zieht er sich doch das aktuelle Tagesdatum und sucht dann danach oder ?
Ja das hatte ich jetzt aber nach deinem Wunsch auf Eingabe abgeändertforeach($folder in Get-ChildItem "$quelle\$(get-date -f yyyyMMdd)_*\Dokument" -Directory
Hier zieht er sich doch das aktuelle Tagesdatum und sucht dann danach oder ?

Das stimmt ja nun überhaupt gar nicht mit deiner Bescheibung im Ursprungs-Beitrag überein das ist ja vollkommen anders ...

S. Anpassung oben.

Hier bei meinem Test erfolgreich
Works as designed.
Works as designed.
Ich vermute hier gibt es Beschränkungen.
Naja Schreibrechte musst du auf das Ziel schon haben, wenn nicht würde das das Skript aber anmeckern, also entweder verschweigst du immer noch was was wir hier nicht sehen können, oder du gibst das Datum falsch ein (yyyyMMdd) oder heute ist tatsächlich Freitag und du hast die Powershell Executionpolicy nicht angepasst...
Eben hat er beim debuggen nochmal gemeckert mit den Rechten, was vorher nie war.
Executionpolicy ...Wie vermutet, es ist schon Freitag 
Beitrag dann bitte noch auf gelöst setzen!
Ciao.
p.s. Zumindest ein "Danke" hätte wohl echt nicht weh getan ... 🖖
Ciao.
p.s. Zumindest ein "Danke" hätte wohl echt nicht weh getan ... 🖖

Naja du solltest zumindest den Code einmal lesen und verstehen lernen, dann musst du zukünftig auch nicht jeden F.... erfragen und kannst dir selbst helfen, das sollte hier ja eigentlich das Ziel sein, nicht das man sich hier die eigene Arbeit machen lässt 🖖.