pixel0815
Goto Top

Dateien kopieren und Order erzeugen

Guten Morgen,

ich habe eine Ordnerstruktur die sieht so aus:

C:\Hauptordner\Ordner1
\Ordner2
\Ordner3
\Ordner4

In den Ordner liegen Dateien, diese haben jeweils ein unterschiedliches Prefix
Beispiel Station1_123454.pdf, Station2_12345.pdf usw.

Die Dateien für die verschiedenen Stationen sollen in ein anderes Verzeichnis kopiert werden.

Wie schaffe ich es am einfachsten die Dateien in den Unterordner zu durchforsten, auf dem Zielsystem dann die Ordnerstruktur wie in der Quelle auf dem Zielsystem zu erstellen und entsprechend die Dateien passend in die jeweiligen Unterordner zu hinterlegen?

Im Ziel soll die obrige Struktur falls nicht vorhanden erstellt werden, dann jeweils in Ordner 1-4 passend die Dateien aus der Quelle herausgesucht und auf dem Ziel kopiert werden.

Hat hier jemand ein Tipp?

Es wird auch eine CSV als Basis genommen


"Quelle";"Station";"Ziel";"Rechner"  
"\\server\quelle";"Station1";"C:\Stationsordner\";"Rechner1"  

Damit finde ich dann zwar die Dateien aber auf der Gegenseite werden keine Ordner angelegt.
Import-Csv -Path C:\MedicationTest.csv -Delimiter ";" -ErrorAction Stop | foreach {  
       
$Station = $_.Station
$Quellpfad = $_.Quelle
$PC = $_.Rechner
$Ziel = $_.Ziel
$Zielpfad = $ziel+$Station

$FolderandFiles =Get-ChildItem -Path $quellpfad -Recurse -Filter "$Station*" |  Copy-Item -Destination $ziel -Recurse -Force  
}      

Content-Key: 21852627812

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

Printed on: September 29, 2023 at 08:09 o'clock

Member: Siddius
Solution Siddius Sep 19, 2023 updated at 07:32:11 (UTC)
Goto Top
Ist ja nicht so das es das hier nicht schon x mal gegeben hat, aber naja, die Suchfunktion wird ja wieder mal Stiefmütterlich genutzt ...
foreach ($line in Import-Csv -Path C:\MedicationTest.csv -Delimiter ";"){  
    foreach($file in Get-ChildItem $line.Quelle -Recurse -File -Filter "$($line.Station)_*"){  
        $dest = $file.DirectoryName -replace [regex]::escape($line.quelle),($line.Ziel + $line.Station)
        if(!(Test-Path $dest)){md $dest -force | out-null}
        $file | copy-item -Destination $dest
    }
}
Sid.