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....
Please also mark the comments that contributed to the solution of the article
Content-Key: 4578830745
Url: https://administrator.de/contentid/4578830745
Printed on: April 27, 2024 at 12:04 o'clock
3 Comments
Latest comment
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