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

Printed on: April 23, 2024 at 06:04 o'clock

Member: skahle85
skahle85 Apr 22, 2016 at 12:05:12 (UTC)
Goto Top
Hey,

Filter für Quelldateien ist hier der "Zauber"

Parameter: -filter, -include bzw. -exclude

z.B.
Copy-Item -filter *.jpg 
Member: sxxt60
sxxt60 Apr 22, 2016 at 12:11:55 (UTC)
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
Member: skahle85
Solution skahle85 Apr 22, 2016 updated at 12:14:04 (UTC)
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  
        }
Member: sxxt60
sxxt60 Apr 22, 2016 at 12:22:16 (UTC)
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 Apr 22, 2016 updated at 12:31:04 (UTC)
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