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-ID: 21852627812

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

Ausgedruckt am: 21.11.2024 um 21:11 Uhr

7907292512
Lösung 7907292512 19.09.2023 aktualisiert um 09:32:11 Uhr
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.
pixel0815
pixel0815 28.11.2023 aktualisiert um 11:52:57 Uhr
Goto Top
Hey! Wie kann ich diesen Block einschränken

$file | copy-item -Destination $dest

Es gibt in den Dateien die in $File laufen ein Prefix.
Leider gibt es auch z.B. folgende Situation

A_A1_Blabla.pdf und
A_A1_Fach_Blabla.pdf

A_A1 und A_A1_Fach sind jeweils die Stationen. Ich möchte aber nur die Dateien mit dem Prefix A_A1 in das Ziel kopieren. Ich dachte das ich dieses mit einer Where-Objekt wieder herausfiltern
| Where-Object {$_.Name -notlike "$($line.Station)"}  
aber das funktioniert nicht. Am ende kopiert er A_A1 und A_A1_Fach alles zusammen, was aber nicht so sein darf.

Wie kann ich das am besten trennen, dass auch wirklich nur der richtige Inhalt im Ordner ankommt??