Mirroring mit Robocopy: Kann Robocopy das Änderungsdatum von Quelldatei und Zieldatei vergleichen?
Robocopy mit der Option /MIR und /XO kopiert Quelldateien nicht, die ein älteres Erstelldatum haben als die Zieldatei. Kann Robocopy statt dem Erstelldatum auch das Änderungsdatum von Quelldatei und Zieldatei vergleichen (LastChangeTime, nicht LastAccessTime)? Oder gibt es eine andere Lösung mit Robocopy oder Batch dafür?
2 Antworten
Wo hast du denn diese Weisheiten her?
Robocopy verwendet für /XO immer das Änderungsdatum! (Beachte aber, das Robocopy einen Granularität von einer Minute hat)
Braucht man das Änderungsdatum "feiner" hilft nur Powershell. cmd/Batch hat keine genauen Dateizeiten (außer WMIC DATAFILE ... 🤮 )
demo.ps1
$sourceFolder = 'C:\Test'
$targetFolder = 'f:\blubb'
Get-ChildItem $sourceFolder -Recurse |
ForEach-Object {
$targetPath = $_.FullName -replace [regex]::Escape($sourceFolder), $targetFolder
#wenn nicht existiert kopieren
if (!(Test-Path $targetPath) ) {
Copy-Item $_.FullName -Destination $targetPath -verb
}
#sonst: nur wenn Quelldatei.LastWriteTime größer Zieldatei.LastWriteTime auch kopieren (aber keinen Ordner)
elseif ($_.LastWriteTime -gt $(Get-Item $targetPath).LastWriteTime -and ($_.Attributes -notlike '*Directory*')) {
Write-Host "$($_.LastWriteTime) ist neuer als $((Get-Item $targetPath).LastWriteTime )" -fo red
Copy-Item $_.FullName -Destination $targetPath -verb
}
}
# Optional wie bei robocopy /purge: Zieldatei löschen, wenn die Quelldatei nicht mehr existiert
Get-ChildItem $targetFolder -Recurse |
Where-Object {
!(Test-Path ($_.FullName -replace [regex]::Escape($targetFolder), $sourceFolder))
} |
Remove-Item -Recurse -verb
pause
/MAXLAD und /MINLAD (hier geht es um den letzten Zugriff)
/MAXAGE und /MINAGE (hier geht es um das Dateialter)
als Parameter mal anschauen.
Danke. Aber letzter Zugriff und Dateialter sind nicht gleich Änderungsdatum, und ich muss das Änderungsdatum vergleichen.