2025年3月05日
Windows フォーラム トップコントリビューター
Windows フォーラムでは、以下の方々が 2025 年 2 月のトップ回答者さまでした:
Atomu Hidaka-, Hebikuzure, KazushigeSakai, M_Marl
コミュニティにご協力くださり、心よりお礼申し上げます。ありがとうございます。
2025年2月07日
初めてコミュニティをご利用のユーザーさま、質問者さまへ
Microsoft コミュニティは、ユーザーさま同士が情報の提供や交換をしあい、質問や問題を解決するための場です。コミュニティの利用方法やルールについての詳細は、Microsoft コミュニティについてよく寄せられる質問 (FAQ) でご案内しています。
投稿した質問が自己解決、または提案された対処法が問題解決につながった場合には、スレッド内でご報告ください。同じ問題を抱えてコミュニティを訪れる他のユーザーさまにも、その解決法が役立つかもしれません。
ご協力に感謝します!
robocopy で毎回「強制上書き」はできますか?
C:\Windows\system32\robocopy.exe "C:\test10" "C:\test20" /E /IS
C:\Windows\SysWOW64\robocopy.exe "C:\test10" "C:\test20" /E /IS
↓
スキップ されてしまいます「同じ」で。。。
「/is」を付けると、「強制的に上書き更新する」と書いてありますが、、
間違いですか??
---------------------------------参考
http://www.atmarkit.co.jp/ait/articles/1309/27/news116.html
■強制的に上書き更新する
「/is」オプションを付けると同じファイルでもコピーされるので、全ファイルを強制的に上書き更新できる。
対象OS:Windows XP/Windows Vista/Windows 7/Windows 8/Windows Server 2003/Windows Server 2008/Windows Server 2008 R2/Windows Server 2012
---------------------------------
「環境」
Windows 10 Anniversary Pro 64bit
不適切な発言
ありがとうございます。
報告されたコンテンツが送信されました
こんにちは。
robocopy で毎回「強制上書き」はできますか?
できます。
「/is」を付けると、「強制的に上書き更新する」と書いてありますが、、
間違いですか??
それで間違っていません。
C:\Windows\system32\robocopy.exe "C:\test10" "C:\test20" /E /IS
C:\Windows\SysWOW64\robocopy.exe "C:\test10" "C:\test20" /E /IS
↓
スキップ されてしまいます「同じ」で。。。
スキップされたのはファイルでしょうか、ディレクトリでしょうか。
ディレクトリであれば、相対パスで同じ名前の場合はスキップされます。
※robocopyで問題がある場合は、内容が差支えなければ、ログをそのまま貼っていただいたほうが、話は進めやすいかもしれません。
PS C:\> Robocopy.exe "C:\test10" "C:\test20" /e /is /x
-------------------------------------------------------------------------------
ROBOCOPY :: Windows の堅牢性の高いファイル コピー
-------------------------------------------------------------------------------
開始: 2016年11月5日 21:35:03
コピー元 : C:\test10\
コピー先 : C:\test20\
ファイル: *.*
オプション: *.* /X /S /E /DCOPY:DA /COPY:DAT /IS /R:1000000 /W:30
------------------------------------------------------------------------------
2 C:\test10\
同じ 13 a.txt
同じ 13 b.txt
0 C:\test10\sub1\
------------------------------------------------------------------------------
合計 コピー済み スキップ 不一致 失敗 Extras
ディレクトリ: 2 0 2 0 0 0
ファイル: 2 2 0 0 0 0
バイト: 26 26 0 0 0 0
時刻: 0:00:00 0:00:00 0:00:00 0:00:00
終了: 2016年11月5日 21:35:03
不適切な発言
ありがとうございます。
報告されたコンテンツが送信されました
1 人がこの回答を役に立ったと思いました。
·この回答が役に立ちましたか?
お役に立てず、申し訳ございません。
素晴らしい! フィードバックをありがとうございました。
この回答にどの程度満足ですか?
フィードバックをありがとうございました。おかげで、サイトの改善に役立ちます。
この回答にどの程度満足ですか?
フィードバックをありがとうございました。
>ディレクトリであれば、相対パスで同じ名前の場合はスキップされます。
ディレクトリとファイルです
つまりディレクトリはできないのですね!?
ディレクトリは毎回無条件に上書きは
できません。。。ですね
▼ROBOCOPY ではやりたかったことが
▼できないようですね。。
>※robocopyで問題がある場合は、内容が差支えなければ、
>ログをそのまま貼っていただいたほうが、話は進めやすいかもしれません。
以下です。。
-----------------------------------------------参考
-------------------------------------------------------------------------------
ROBOCOPY :: Windows の堅牢性の高いファイル コピー
-------------------------------------------------------------------------------
開始: 2016年11月6日 6:37:36
コピー元 : C:\test10\
コピー先 : C:\test20\
ファイル: *.*
オプション: *.* /S /E /DCOPY:DA /COPY:DAT /IS /R:1000000 /W:30
------------------------------------------------------------------------------
1 C:\test10\
同じ 1 test.txt
0 C:\test10\NVIDIA\
0 C:\test10\NVIDIA\DisplayDriver\
0 C:\test10\NVIDIA\DisplayDriver\373.06\
0 C:\test10\NVIDIA\DisplayDriver\373.06\Win10_64\
5 C:\test10\NVIDIA\DisplayDriver\373.06\Win10_64\International\
同じ 129845 EULA.txt
同じ 26629 license.txt
同じ 202578 ListDevices.txt
同じ 31035 setup.cfg
同じ 420800 setup.exe
128 C:\test10\NVIDIA\DisplayDriver\373.06\Win10_64\International\Display.Driver\
同じ 458296 dbInstaller.exe
同じ 62783 DisplayDriver.nvi
同じ 1.1 m DisplayDriverExt.dll
同じ 1.2 m flxcomm64.dl_
同じ 5.4 m flxconnect64.dl_
同じ 5.3 m flxcore64.dl_
同じ 26629 license.txt
同じ 561748 mcu.ex_
●中略
同じ 2.3 m nvupdtXP32.dll
同じ 2.9 m nvupdtXP64.dll
同じ 20540 UpdateCore.nvi
同じ 943552 UpdateCoreExt.dll
同じ 203200 WLMerger.exe
------------------------------------------------------------------------------
合計 コピー済み スキップ 不一致 失敗 Extras
ディレクトリ: 116 0 116 0 0 0
ファイル: 802 802 0 0 0 0
バイト: 879.40 m 879.40 m 0 0 0 0
時刻: 0:00:00 0:00:00 0:00:00 0:00:00
速度: 307375740000 バイト/秒
速度: 17588180.923 MB/分
終了: 2016年11月6日 6:37:36
c:\test2>
不適切な発言
ありがとうございます。
報告されたコンテンツが送信されました
この回答が役に立ちましたか?
お役に立てず、申し訳ございません。
素晴らしい! フィードバックをありがとうございました。
この回答にどの程度満足ですか?
フィードバックをありがとうございました。おかげで、サイトの改善に役立ちます。
この回答にどの程度満足ですか?
フィードバックをありがとうございました。
ディレクトリとファイルです
ログを拝見する限り、ファイルはスキップされていないようですが。
合計 コピー済み スキップ 不一致 失敗 Extras
ファイル: 802 802 0 0 0 0
何か他に、ファイルがスキップされたケースがあったのでしょうか。
つまりディレクトリはできないのですね!?
できない、というより、同じ相対パス名であれば、上書きをすることに特段の意味はないかと思います。
ディレクトリは毎回無条件に上書きは
できません。。。ですね
しいて言うならば、属性やタイムスタンプの同期で、robocopyのようなsync系コマンドでは、ディレクトリのタイムスタンプ同期も必要になる場面が多いかと思います。
そのため、たしかに無条件ではありませんが、robocopyには、/DCOPY オプションがあります。
https://technet.microsoft.com/ja-jp/library/cc733145(v=ws.10).aspx
なお、Windows 7までは/DCOPY:T (タイムスタンプコピー)のみでしたが、Windows 8以降は/DCOPY:DATが使えます。
(上記リンク先のマニュアルには、/DCOPY:Tまでしか記載されていませんが、Windows 10であれば/DCOPY:DATは使えます)
ログに表示されている、
オプション: *.* /S /E /DCOPY:DA /COPY:DAT /IS /R:1000000 /W:30
の通り、デフォルトは/DCOPY:DAですので、上記のとおりT(タイムスタンプ)を追加で指定するだけです。
ただし、今回の例で言いますと、コピー元とコピー先のルート、つまり、C:\test20だけは、C:\test10のタイムスタンプがコピーされません。
これは、C:\test10からD:\test10へのコピーでも同様です。
▼ROBOCOPY ではやりたかったことが
▼できないようですね。。
そのようなわけで、他に何か実現したい要件(たとえば、ディレクトリにスキップを出さない、など)があるとすれば、確かにrobocopy以外の別な方法を検討する必要もあるかと思いますが、ほとんどのケースでは、これで間に合っているかとは思います。
不適切な発言
ありがとうございます。
報告されたコンテンツが送信されました
3 ユーザーがこの回答を役に立ったと思いました。
·この回答が役に立ちましたか?
お役に立てず、申し訳ございません。
素晴らしい! フィードバックをありがとうございました。
この回答にどの程度満足ですか?
フィードバックをありがとうございました。おかげで、サイトの改善に役立ちます。
この回答にどの程度満足ですか?
フィードバックをありがとうございました。
合計 コピー済み スキップ 不一致 失敗 Extras
ディレクトリ: 2 0 2 0 0 0
ファイル: 2 2 0▼ 0 0 0
----------------------------------------------------------------
↑
この例でも
ファイルはスキップされていますね
ディレクトリはスキップされていますね
つまりどうやっても
↓
ファイルはスキップされていますね
ディレクトリはスキップされていますね
↓
上書きは全く機能していません。。
「検証」
この例ではファイルが小さいので「スキップ」が
気がつかないのでは??
大きな5Gくらいのファイルでやってみてください
↓
「スキップ」するので、コピーが▼1秒もかかりませんから
こんな原始的な簡単な「上書き」ができないなんて。。。。
不適切な発言
ありがとうございます。
報告されたコンテンツが送信されました
この回答が役に立ちましたか?
お役に立てず、申し訳ございません。
素晴らしい! フィードバックをありがとうございました。
この回答にどの程度満足ですか?
フィードバックをありがとうございました。おかげで、サイトの改善に役立ちます。
この回答にどの程度満足ですか?
フィードバックをありがとうございました。
なるほど、ご指摘の意味は理解できました。
----------------------------------------------------------------
合計 コピー済み スキップ 不一致 失敗 Extras
ディレクトリ: 2 0 2 0 0 0
ファイル: 2 2 0▼ 0 0 0
----------------------------------------------------------------
↑
この例でも
ファイルはスキップされていますね
ディレクトリはスキップされていますね
この例、つまり
Robocopy.exe "C:\test10" "C:\test20" /e /is /x
では、ファイルのコピー済みのファイル個数が2、スキップの個数が0ですので、つまりスキップはされていません。
ファイルスキップのケースとしては、以下、長くなりますが実例です。
PS C:\> # 適当にテストデータを作って、内容と属性を確認する PS C:\> New-Item "C:\test10" -Type Directory | Out-Null PS C:\> New-Item "C:\test20" -Type Directory | Out-Null PS C:\> New-Item "C:\test10\sub1" -Type Directory | Out-Null PS C:\> # Robocopyを/isなしで実行し、ファイルの中身が上書きされたか確認する PS C:\> # もう一度Robocopyを/isなしで実行し、ファイルの中身が上書きされたか確認する
|
つまり、/isオプションのあるなしは、同じファイルであっても「コピー処理の対象」とするかどうか、の違いであることが分かります。
ただ、その「コピー処理の対象」の処理、というものが「先ずファイルの中身を比較してみる」ことを含んだものか、そうではなく「無条件の物理的上書き」をするものか、と言えば、この場合は前者です。
そのため、ご指摘の趣旨である「スキップ」の意味合いが「ファイルの中身が同じであれば、物理的に上書きをしていない」という意味ならば、それは確かにおっしゃる通りだと思います。
そのようなわけで、
「検証」
この例ではファイルが小さいので「スキップ」が
気がつかないのでは??
大きな5Gくらいのファイルでやってみてください
こちらも、上記ご指摘の意味としては、その通りだと思います。
以下のような処理ケースですね。
PS C:\> # 5.8GBのISOをrobocopyする PS C:\> Robocopy.exe "C:\test30" "C:\test40" /e /x /DCOPY:DAT PS C:\> Robocopy.exe "C:\test30" "C:\test40" /is /e /x /DCOPY:DAT |
明らかに、物理的なコピー処理は厳密(strict)でないことが分かります。
こんな原始的な簡単な「上書き」ができないなんて。。。。
こちらについては、むしろ「できない」のでなく「しないようにしている」という動機の方が、より正しいかと思います。
そして実は私自身も、robocopyのようなsync系のコマンドを使う場面で、あえて同じ内容のファイルに物理的な上書きコピーをしなければならない理由が思い当たりません。
(どういうあり方が処理として正しいのかは、sync系コマンドをcopy系コマンドとして使わなければならない、といったような、実際の要件に出会ってみるまで、実感できないでしょう)
ですので、あくまで厳密な物理的上書きデータコピーを必要とする要件でしたら、その場合は、処理そのものの堅牢性との相談にはなりますが、むしろrobocopyよりxcopyを選択したほうがよいかもしれません。
不適切な発言
ありがとうございます。
報告されたコンテンツが送信されました
6 ユーザーがこの回答を役に立ったと思いました。
·この回答が役に立ちましたか?
お役に立てず、申し訳ございません。
素晴らしい! フィードバックをありがとうございました。
この回答にどの程度満足ですか?
フィードバックをありがとうございました。おかげで、サイトの改善に役立ちます。
この回答にどの程度満足ですか?
フィードバックをありがとうございました。