Vom documentation:
/is
Enthält die gleichen Dateien.
/it
Enthält "optimierte" Dateien.
"Gleiche Dateien" bedeutet Dateien, die identisch sind (Name, Größe, Zeiten, Attribute). "Optimierte Dateien" sind Dateien, die den gleichen Namen, die gleiche Größe und die gleichen Zeiten, aber unterschiedliche Attribute haben.
robocopy src dst sample.txt /is # copy if attributes are equal
robocopy src dst sample.txt /it # copy if attributes differ
robocopy src dst sample.txt /is /it # copy irrespective of attributes
This answer auf Super-User hat eine gute Erklärung, welche Art von Dateien der Auswahl Parameter übereinstimmen.
Mit diesem gesagt, könnte ich reproduzieren das Verhalten, das Sie beschreiben, aber von meinem Verständnis der Dokumentation und der Ausgabe robocopy
generiert in meinen Tests würde ich dies als einen Fehler betrachten.
PS C:\temp>New-Item src -Type Directory >$null
PS C:\temp>New-Item dst -Type Directory >$null
PS C:\temp>New-Item src\sample.txt -Type File -Value "test001" >$null
PS C:\temp>New-Item dst\sample.txt -Type File -Value "test002" >$null
PS C:\temp>Set-ItemProperty src\sample.txt -Name LastWriteTime -Value "2016/1/1 15:00:00"
PS C:\temp>Set-ItemProperty dst\sample.txt -Name LastWriteTime -Value "2016/1/1 15:00:00"
PS C:\temp>robocopy src dst sample.txt /is /it /copyall /mir
...
Options : /S /E /COPYALL /PURGE /MIR /IS /IT /R:1000000 /W:30
------------------------------------------------------------------------------
1 C:\temp\src\
Modified 7 sample.txt
------------------------------------------------------------------------------
Total Copied Skipped Mismatch FAILED Extras
Dirs : 1 0 0 0 0 0
Files : 1 1 0 0 0 0
Bytes : 7 7 0 0 0 0
...
PS C:\temp>robocopy src dst sample.txt /is /it /copyall /mir
...
Options : /S /E /COPYALL /PURGE /MIR /IS /IT /R:1000000 /W:30
------------------------------------------------------------------------------
1 C:\temp\src\
Same 7 sample.txt
------------------------------------------------------------------------------
Total Copied Skipped Mismatch FAILED Extras
Dirs : 1 0 0 0 0 0
Files : 1 1 0 0 0 0
Bytes : 7 7 0 0 0 0
...
PS C:\temp>Get-Content .\src\sample.txt
test001
PS C:\temp>Get-Content .\dst\sample.txt
test002
Die Datei wird als kopiert aufgeführt sind, und da es eine gleiche Datei nach der erste robocopy
Lauf zumindest die Zeiten synchronisiert wird. Obwohl nach der Ausgabe 7 Bytes kopiert wurden, wurden in beiden Fällen trotz gesetzten Datenflags tatsächlich keine Daten in die Zieldatei geschrieben (über /copyall
). Das Verhalten ändert sich auch nicht, wenn das Datenflag explizit gesetzt ist (/copy:d
).
Ich musste die letzte Schreibzeit ändern, um robocopy
zu erhalten, um die Daten tatsächlich zu synchronisieren.
PS C:\temp>Set-ItemProperty src\sample.txt -Name LastWriteTime -Value (Get-Date)
PS C:\temp>robocopy src dst sample.txt /is /it /copyall /mir
...
Options : /S /E /COPYALL /PURGE /MIR /IS /IT /R:1000000 /W:30
------------------------------------------------------------------------------
1 C:\temp\src\
100% Newer 7 sample.txt
------------------------------------------------------------------------------
Total Copied Skipped Mismatch FAILED Extras
Dirs : 1 0 0 0 0 0
Files : 1 1 0 0 0 0
Bytes : 7 7 0 0 0 0
...
PS C:\temp>Get-Content .\dst\sample.txt
test001
Eine zugegebenermaßen hässliche Abhilfe wäre die letzte Schreibzeit von gleichen/gezwickt Dateien zu ändern robocopy
zu zwingen, die Daten zu kopieren:
& robocopy src dst /is /it /l /ndl /njh /njs /ns /nc |
Where-Object { $_.Trim() } |
ForEach-Object {
$f = Get-Item $_
$f.LastWriteTime = $f.LastWriteTime.AddSeconds(1)
}
& robocopy src dst /copyall /mir
zu xcopy
Switching ist wahrscheinlich die beste Wahl:
OK. Ich werde xcopy verwenden. – tbl