sxxt60
Goto Top

Script um Dateien aus einem Ordnerbaum herauszukopieren

Hallo Admingemeinde,

ich stehe aktuell vor der Anforderung, für eine Datenmigration in ein DMS System, aus einer bestehenden Ordnerstruktur die "relevanten" Belege per Script herauszukopieren.

Ich dachte hier an Powershell oder Batch, wobei ich bis dato mit Powershell noch keine lauffähige Lösung zustand gebracht habe.

Die Schwierigkeit der Anforderung besteht in der Struktur der Daten

- Ordner Akten
- - Ordner Baustelle A
- - - Ordner Anfragen
- - - - Datei 1
- - - - Datei 2
- - - Ordner Bilder
- - - - Datei 1
- - - - Datei 2
- - Ordner Baustelle B
- - - Ordner Anfragen
- - - - Datei 2
- - - Ordner Bilder
- - - - Datei 1
- - Ordner Baustelle C
- - - Ordner Anfragen
- - - - Datei 1
- - - Ordner Bilder
- - - - Datei 1
...und so weiter.

Für die Migration sind nur die Dateien aus dem Unterordner Bilder relevant. Die Relevanz bemisst sich also am immer gleichen Ordnernamen Bilder, der jedoch in einer verschachtelten Struktur vorhanden ist. Alle Dateien, welche als Parentobjekt den Ordner Bilder haben, sollen an in einen Ordner kopiert werden.

Habt ihr hierfür eine Idee?

Danke für eure Unterstützung!
Florian

Content-Key: 302577

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

Ausgedruckt am: 29.03.2024 um 09:03 Uhr

Mitglied: skahle85
skahle85 22.04.2016 um 14:05:12 Uhr
Goto Top
Hey,

Filter für Quelldateien ist hier der "Zauber"

Parameter: -filter, -include bzw. -exclude

z.B.
Copy-Item -filter *.jpg 
Mitglied: sxxt60
sxxt60 22.04.2016 um 14:11:55 Uhr
Goto Top
Hallo skahle,

ja die reine Filterung auf Filenamen ist nicht das Thema, dass geht sehr simpel.

Das Problem ist, die Dateinamen spielen für diesen Job keine Rolle.

Das Skript soll die passenden Ordner in der bestehenden Struktur nach dem Namen heraussuchen und dann rekursiv die Dateien unabhängig vom Dateinamen kopieren.

Gruß
Florian
Mitglied: skahle85
Lösung skahle85 22.04.2016 aktualisiert um 14:14:04 Uhr
Goto Top
und ungetestet etwas spezifischer:

$Src = 'Source'  
$Dst = 'Ziel'  
$FolderName = 'Bilder*'  
$FileType = '*.*'  
Get-ChildItem -Path $Src -Filter $FolderName -Recurse -Force |
    Where-Object {$_.PSIsContainer} |
        ForEach-Object {
            Copy-Item -Path (Join-Path -Path $_.FullName -ChildPath '\*') -Filter $FileType -Destination $Dst -Force  
        }
Mitglied: sxxt60
sxxt60 22.04.2016 um 14:22:16 Uhr
Goto Top
Hallo skahle,

der Wahnsinn, dafür dass das Skript ungetestet ist, lief das aber verdammt gut.

Anforderung zu 100% erfüllt.

Vielen herzlichen Dank dafür!

Gruß und ein schönes Wochenende
Florian
Mitglied: 114757
114757 22.04.2016 aktualisiert um 14:31:04 Uhr
Goto Top
Easy peasy like this as oneliner
gci 'c:\Quelle' -recurse -Force | ?{!$_.PSIsContainer -and $_.Directory.Name -eq 'Bilder'} | copy-item -Destination 'c:\Zielordner' -Force  
Gruß jodel32