Kopieren - Vergleichen mit PS
Ich möchte erreichen das ich verschiedene Dateien mit Name "XY" oder "QW" auf bestimmten Laufwerke Suche, und nach Laufwerk "Z" Kopiert werden, sind diese dort schon vorhanden und identisch soll keine Kopie gezogen werden.
Er ist nicht schön... ich kein Profi.... also .....
leider erkennt es nur, wenn die erste Datei die gesucht werden soll nicht vorhanden ist, und löst nur dann den nächsten Punkt aus.
...
Habe das ganze schon versucht mit Batch, jedoch wurde mir dann geraten mit PS das zu machen....
$search = "*XY*","*2*"
$pathes = "C:\Users\Thoma\OneDrive\Desktop\1\1","C:\Users\Thoma\OneDrive\Desktop\1\2","C:\Users\Thoma\OneDrive\Desktop\1\3","C:\Users\Thoma\OneDrive\Desktop\1\4"
$ziel = "C:\Users\Thoma\OneDrive\Desktop\2\Ziel"
md $ziel -Force
$testdatei = Get-ChildItem -Path $ziel
If (Test-Path $testdatei)
{
Write-Host -BackGroundColor Green "Die Datei $($testdatei) existiert."
}
else
{
Get-ChildItem -Path $pathes -File -Recurse -Force -Include $search |copy-item -Destination $ziel -verbose -passthru
Write-Host -BackgroundColor Red "Die Datei $($testdatei) existiert bisher nicht."
}
Er ist nicht schön... ich kein Profi.... also .....
leider erkennt es nur, wenn die erste Datei die gesucht werden soll nicht vorhanden ist, und löst nur dann den nächsten Punkt aus.
...
Habe das ganze schon versucht mit Batch, jedoch wurde mir dann geraten mit PS das zu machen....
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 4578830745
Url: https://administrator.de/forum/kopieren-vergleichen-mit-ps-4578830745.html
Ausgedruckt am: 24.12.2024 um 00:12 Uhr
3 Kommentare
Neuester Kommentar
Moin,
Das geht wie folgt:
Ich würde allerdings eher mit Foregroundcolor arbeiten, als mit Backgroundcolor.
BTW: Hast du schon mal einen Blick in unseren Leitfaden geworfen? Powershell Leitfaden für Anfänger
Gruß Thomas
Habe das ganze schon versucht mit Batch, jedoch wurde mir dann geraten mit PS das zu machen....
ein guter Rat. Warum PowerShell und nicht Batch?Das geht wie folgt:
$Search = "*XY*","*2*"
$Pathes = @(
"$ENV:OneDrive\Desktop\1\1"
"$ENV:OneDrive\Desktop\1\2"
"$ENV:OneDrive\Desktop\1\3"
"$ENV:OneDrive\Desktop\1\4"
)
$Ziel = "$ENV:Onedrive\Desktop\2\Ziel"
Foreach ($Path in $Pathes) {
Foreach ($File in Get-ChildItem -File -Path "$Path\*" -include $Search) {
$Zieldatei = $File.Fullname.Replace($Path,$Ziel)
if (!(Test-Path $Zieldatei) -or (Get-Item $Zieldatei).LastWriteTime -lt $File.LastWriteTime) {
Write-Host -B Red "Die Datei ""$Zieldatei"" existiert nicht. "
Copy-Item -Path $File -Destination $Zieldatei
} else {
Write-Host -B Green "Die Datei ""$Zieldatei"" existiert. "
}
}
}
BTW: Hast du schon mal einen Blick in unseren Leitfaden geworfen? Powershell Leitfaden für Anfänger
Gruß Thomas
Zitat von @charmeur:
Ok danke für die das Script, gibt es auch die Möglichkeiten die unterordner bei der Suche mit einzubeziehen ?
Selbstverständlich geht das. Dafür gibt es bei Get-ChildItem den "-Recurse"-Parameter.Ok danke für die das Script, gibt es auch die Möglichkeiten die unterordner bei der Suche mit einzubeziehen ?
Beachte aber, das man die Dateien nur kopieren kann, wenn der Unterordner im Ziel bereits existiert.
Das heisst: Du musst...
- entweder überprüfen, ob der Zielordner existiert; und falls nicht diesen dann erstellen
- oder als kleinen Trick einfach vor dem Kopiervorgang mit New-Item und dem "-Force"-Parameter eine leere Zieldatei erstellen. Dabei werden ggfs. nicht existierende Unterordner automatisch erstellt.
$Search = "*XY*","*2*"
$Pathes = @(
"$ENV:OneDrive\Desktop\1\1"
"$ENV:OneDrive\Desktop\1\2"
"$ENV:OneDrive\Desktop\1\3"
"$ENV:OneDrive\Desktop\1\4"
)
$Ziel = "$ENV:Onedrive\Desktop\2\Ziel"
Foreach ($Path in $Pathes) {
Foreach ($File in Get-ChildItem -Recurse -File -Path "$Path\*" -include $Search) {
$Zieldatei = $File.Fullname.Replace($Path,$Ziel)
if (!(Test-Path $Zieldatei)) {
Write-Host -B Red "Die Datei ""$Zieldatei"" existiert nicht. "
[void](New-Item -ItemType File -Force $Zieldatei)
Copy-Item -Path $File -Destination $Zieldatei
} ElseIf ((Get-Item $Zieldatei).LastWriteTime -lt $File.LastWriteTime) {
Write-Host -B Red "Die Datei ""$Zieldatei"" wurde verändert. "
Copy-Item -Path $File -Destination $Zieldatei
} else {
Write-Host -B Green "Die Datei ""$Zieldatei"" existiert. "
}
}
}
Gruß Thomas
Serie: Kopieren mit PS
Kopieren - Vergleichen mit PS3