chaefre
Goto Top

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

Content-Key: 92589148750

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

Printed on: May 6, 2024 at 02:05 o'clock

Mitglied: 7907292512
Solution 7907292512 Aug 23, 2023, updated at Aug 24, 2023 at 12:12:20 (UTC)
Goto Top
Powershell etwa so :
# 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
}
Gruß siddius
Member: Chaefre
Chaefre Aug 24, 2023 at 11:20:56 (UTC)
Goto Top
Hi Siddius,

sorry vielleicht etwas verwirrend, das mit dem täglich und dem Tagesordner. Der Ordner heißt immer yyyyMMDD_XXXXXX und er brauch sich hier nicht das Datum ziehen. Da es 3 - 5 mal die Woche stattfindet. Die Nacharbeit dann aber nicht immer taggleich, sie kann auch mal Tage später stattfinden.
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.
Mitglied: 7907292512
7907292512 Aug 24, 2023 updated at 11:36:02 (UTC)
Goto Top
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.
Bisher bekomm ich es noch nicht zum laufen.
Funktioniert hier in meinem Test mit einer Ordnerstruktur nach deinem Schema einwandfrei.

Hier mein Ergebnis:

screenshot
Member: Chaefre
Chaefre Aug 24, 2023 at 11:33:04 (UTC)
Goto Top
Anbei nochmal ein Bild zur Veranschaulichung
2023-08-24 13_31_56-darstellung was passieren soll.docx - word
Member: Chaefre
Chaefre Aug 24, 2023 at 11:35:03 (UTC)
Goto Top
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 ?
Mitglied: 7907292512
7907292512 Aug 24, 2023 updated at 11:37:00 (UTC)
Goto Top
Hier mein Testaufbau und das erzeugte Ergebnis:
screenshot
Mitglied: 7907292512
7907292512 Aug 24, 2023 at 11:37:22 (UTC)
Goto Top
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ändert
Mitglied: 7907292512
7907292512 Aug 24, 2023 updated at 11:41:37 (UTC)
Goto Top
Zitat von @Chaefre:

Anbei nochmal ein Bild zur Veranschaulichung

Das stimmt ja nun überhaupt gar nicht mit deiner Bescheibung im Ursprungs-Beitrag überein das ist ja vollkommen anders ... face-sad Schon wieder früh Freitag diese Woche ...
Member: Chaefre
Chaefre Aug 24, 2023 at 11:44:49 (UTC)
Goto Top
Sorry, war bissel doof nur mit Editor hier darzustellen. Ich habe dann versucht mit den Punkten die Ebenen der ordner darzustellen und vor Dokumente , Test und Vortest ist nur 1 Punkt, das heißt sie liegen auf einer ebene
Mitglied: 7907292512
7907292512 Aug 24, 2023 at 12:13:37 (UTC)
Goto Top
S. Anpassung oben.
Member: Chaefre
Chaefre Aug 24, 2023 at 13:34:55 (UTC)
Goto Top
Hmm Danke, leider kommt nichts im Zielpfad an.

  1. Quell-Pfad
$quelle = "C:\Users\tanc\Documents\Test\Quelle"
  1. Zielpfad
$ziel = "C:\Users\tanc\Documents\Test\Ziel"

das sind meine Pfade.
Ich vermute hier gibt es Beschränkungen.
Mitglied: 7907292512
7907292512 Aug 24, 2023 updated at 13:48:39 (UTC)
Goto Top
Hier bei meinem Test erfolgreich

screenshot

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...
Member: Chaefre
Chaefre Aug 24, 2023 at 13:51:54 (UTC)
Goto Top
Eben hat er beim debuggen nochmal gemeckert mit den Rechten, was vorher nie war.
Jetzt geht es aber, er führt es sauber aus und macht auch das was er soll.
2023-08-24 15_51_32-windows powershell ise
Mitglied: 7907292512
7907292512 Aug 24, 2023 updated at 13:56:31 (UTC)
Goto Top
Eben hat er beim debuggen nochmal gemeckert mit den Rechten, was vorher nie war.
Executionpolicy ...Wie vermutet, es ist schon Freitag face-big-smile. N' Danke und nen Haken an den Beitrag wäre noch schön, und ab dafür.
Member: Chaefre
Chaefre Aug 24, 2023 at 13:58:08 (UTC)
Goto Top
Ich hab jetzt nochmal rumgespielt und das script geht trotzdem.

ich hatte es vorhin schon vermutet, da stand es es auf Remotesigned, dann hatte ich alles rausgenommen und es hatte nicht funktuioniert, war dann aber plötzlich auf restricted, aber das script ging, nun hab ich es wieder auf remote gesetzt und es geht auch wieder .... ohne worte
Mitglied: 7907292512
7907292512 Aug 24, 2023 updated at 14:13:12 (UTC)
Goto Top
Beitrag dann bitte noch auf gelöst setzen!

Ciao.

p.s. Zumindest ein "Danke" hätte wohl echt nicht weh getan ... 🖖
Member: Chaefre
Chaefre Aug 26, 2023 at 12:52:19 (UTC)
Goto Top
Hi Siddius,

ich bin am Freitag nicht mehr dazu gekommen es final weiter zu prüfen, weil mein Sohn heute Einschulung hat und es noch Vorbereitungen zu erledigen gab.

Ja schon mal ein großes Dankeschön für deine Mühe bei dem Thema!

Grüße und weiter so!!! 👍👍👍
Member: Chaefre
Chaefre Aug 26, 2023 at 12:52:55 (UTC)
Goto Top
Also ich weiß noch nicht final ob es gelöst ist, schau ich mir nochmal an.
Mitglied: 7907292512
7907292512 Aug 26, 2023 updated at 13:25:45 (UTC)
Goto Top
Zitat von @Chaefre:

Also ich weiß noch nicht final ob es gelöst ist, schau ich mir nochmal an.
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 🖖.