一般に、Robocopyはlastwrittendateとfilesizeが同じファイルを無視します。この設計からどのように逃れることができますか? Robocopyで強制的に上書きしたいと思います。
Dst\sample.txtはtest001と書かれているはずです。ただし、これらのファイルはRobocopyによって同じファイルとして認識され、上書きされません。この場合、「/ IS」オプションは無効です。
New-Item src -itemType Directory
New-Item dst -itemType Directory
New-Item src\sample.txt -itemType File -Value "test001"
New-Item dst\sample.txt -itemType File -Value "test002"
Set-ItemProperty src\sample.txt -Name LastWriteTime -Value "2016/1/1 15:00:00"
Set-ItemProperty dst\sample.txt -Name LastWriteTime -Value "2016/1/1 15:00:00"
ROBOCOPY.exe src dst /COPYALL /MIR
Get-Content src\sample.txt, dst\sample.txt
> test001
> test002
ROBOCOPY.exe src dst /COPYALL /MIR /IS
Get-Content src\sample.txt, dst\sample.txt
> test001
> test002
ドキュメント から:
/is
同じファイルが含まれます。/it
「微調整された」ファイルを含みます。
「同じファイル」とは、同一のファイル(名前、サイズ、時間、属性)を意味します。 「微調整されたファイル」とは、名前、サイズ、時間は同じだが属性が異なるファイルを意味します。
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
この回答 スーパーユーザーには、選択パラメーターが一致するファイルの種類についての適切な説明があります。
そうは言っても、説明した動作を再現することはできますが、テストで生成されたドキュメントと出力robocopy
の理解から、これをバグと見なします。
PS C:\ temp> New-Item src-タイプディレクトリ> $ 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 ... オプション:/ S/E/COPYALL/PURGE/MIR/IS/IT/R:1000000 /W:30 --- -------------------------------------------------- ------------------------- 1 C:\ temp\src\ 変更された7 sample.txt ---------------------------------------- -------------------------------------- 合計 コピー済み スキップされた不一致FAILED Extras Dirs:1 0 0 0 0 0 Files:1 1 0 0 0 0 バイト:7 7 0 0 0 0 ... PS C:\ temp> robocopy src dst sample.txt/is/it/copyall/mir ... オプション:/ S/E/COPYALL/PURGE/MIR/IS/IT/R:1000000 /W:30 --- -------------------------------------------------- ------------------------- 1 C:\ temp\src\ 同じ7 sample.txt ---------------------------------------- -------------------------------------- 合計 コピー済み スキップされた不一致FAILED Extras Dirs:1 0 0 0 0 0 Files:1 1 0 0 0 0 バイト:7 7 0 0 0 0 ... PS C:\ temp> Get-Content。\ src\sample.txt test001 PS C:\ temp> Get-Content。\ dst\sample.txt test002
ファイルはコピーされたものとしてリストされ、同じファイルafterになるため、少なくとも最初のrobocopy
runは同期されます。ただし、出力に従って7バイトがコピーされたとしても、データフラグが設定されているにもかかわらず(/copyall
)。データフラグが明示的に設定されていても、動作は変わりません(/copy:d
)。
実際にデータを同期するには、robocopy
を取得するために最後の書き込み時間を変更する必要がありました。
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 ... オプション:/ S/E/COPYALL/PURGE/MIR/IS/IT/R:1000000 /W:30 --- -------------------------------------------------- ------------------------- 1 C:\ temp\src\ 100%新しい7 sample.txt ---------------------------------------- -------------------------------------- 合計 コピー済み スキップされた不一致FAILED Extras Dirs:1 0 0 0 0 0 Files:1 1 0 0 0 0 バイト:7 7 0 0 0 0 ... PS C:\ temp> Get-Content。\ dst\sample.txt test001
明らかにい回避策は、同じ/微調整されたファイルの最終書き込み時間を変更して、robocopy
にデータをコピーさせることです。
& 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
xcopy
に切り替えるのがおそらく最良のオプションです。
& xcopy src dst /k/r/e/i/s/c/h/f/o/x/y
これは、すべてのフォルダーが対応するユーザーのデスクトップ上にあり、適切なアクセス許可のないショートカットを介して到達できるホームフォルダーに対してこれを行いました。そこで、Robocopyをパラメーターとともに使用して、正しい設定でファイルを上書きしました。
FOR /F "tokens=*" %G IN ('dir /b') DO robocopy "\\server02\Folder with shortcut" "\\server02\home\%G\Desktop" /S /A /V /log+:C:\RobocopyShortcut.txt /XF *.url *.mp3 *.hta *.htm *.mht *.js *.IE5 *.css *.temp *.html *.svg *.ocx *.3gp *.opus *.zzzzz *.avi *.bin *.cab *.mp4 *.mov *.mkv *.flv *.tiff *.tif *.asf *.webm *.exe *.dll *.dl_ *.oc_ *.ex_ *.sy_ *.sys *.msi *.inf *.ini *.bmp *.png *.gif *.jpeg *.jpg *.mpg *.db *.wav *.wma *.wmv *.mpeg *.tmp *.old *.vbs *.log *.bat *.cmd *.Zip /SEC /IT /ZB /R:0
ご覧のように、(念のため)無視するように設定したファイルの種類はたくさんあります。ニーズやケースシナリオに合わせて設定してください。
Windows Server 2012でテストされ、すべてのスイッチはMicrosoftのサイトなどで文書化されています。