Mirroring mit Robocopy: Kann Robocopy das Änderungsdatum von Quelldatei und Zieldatei vergleichen?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
josk45 
Fragesteller
 21.04.2023, 19:18

Du hast recht. Vielen Dank!

1

/MAXLAD und /MINLAD (hier geht es um den letzten Zugriff)
/MAXAGE und /MINAGE (hier geht es um das Dateialter)

als Parameter mal anschauen.

josk45 
Fragesteller
 21.04.2023, 00:38

Danke. Aber letzter Zugriff und Dateialter sind nicht gleich Änderungsdatum, und ich muss das Änderungsdatum vergleichen.

0