robocopy で毎回「強制上書き」はできますか?

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で問題がある場合は、内容が差支えなければ、
>ログをそのまま貼っていただいたほうが、話は進めやすいかもしれません。

以下です。。

-----------------------------------------------参考


c:\test2>C:\Windows\SysWOW64\robocopy.exe "C:\test10" "C:\test20"  /E /IS

-------------------------------------------------------------------------------
   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:\> New-Item "C:\test20\sub1" -Type Directory | Out-Null
PS C:\> Set-Content "C:\test10\a.txt", "C:\test10\b.txt" "hello world"
PS C:\> Set-Content "C:\test20/a.txt","C:\test20/b.txt"  "heyyy warby!!"
PS C:\> # ファイルの中身を確認する
PS C:\> Get-Content "C:\test10/a.txt", "C:\test20/a.txt"
hello world
heyyy warby!!
PS C:\> Get-Content "C:\test10/b.txt", "C:\test20/b.txt"
hello world
heyyy warby!!

PS C:\> # Robocopyを/isなしで実行し、ファイルの中身が上書きされたか確認する
PS C:\> Robocopy.exe "C:\test10" "C:\test20"  /e /x /DCOPY:DAT
-------------------------------------------------------------------------------
   ROBOCOPY     ::     Windows の堅牢性の高いファイル コピー
-------------------------------------------------------------------------------
  開始: 2016年11月6日 17:06:13
   コピー元 : C:\test10\
     コピー先 : C:\test20\
    ファイル: *.*
  オプション: *.* /X /S /E /DCOPY:DAT /COPY:DAT /R:1000000 /W:30
------------------------------------------------------------------------------
                           2    C:\test10\
100%              古い                13        a.txt
100%              古い                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
       速度:                8666 バイト/秒
       速度:               0.495 MB/分
   終了: 2016年11月6日 17:06:13
PS C:\> Get-Content "C:\test10/a.txt", "C:\test20/a.txt"
hello world
hello world
PS C:\> Get-Content "C:\test10/b.txt", "C:\test20/b.txt"
hello world
hello world

PS C:\> # もう一度Robocopyを/isなしで実行し、ファイルの中身が上書きされたか確認する
PS C:\> Robocopy.exe "C:\test10" "C:\test20"  /e /x /DCOPY:DAT
-------------------------------------------------------------------------------
   ROBOCOPY     ::     Windows の堅牢性の高いファイル コピー
-------------------------------------------------------------------------------
  開始: 2016年11月6日 17:06:13
   コピー元 : C:\test10\
     コピー先 : C:\test20\
    ファイル: *.*
  オプション: *.* /X /S /E /DCOPY:DAT /COPY:DAT /R:1000000 /W:30
------------------------------------------------------------------------------
                           2    C:\test10\
                           0    C:\test10\sub1\
------------------------------------------------------------------------------
                  合計     コピー済み      スキップ       不一致        失敗    Extras
   ディレクトリ:         2         0         2         0         0         0
     ファイル:         2         0         2         0         0         0
      バイト:        26         0        26         0         0         0
       時刻:   0:00:00   0:00:00                       0:00:00   0:00:00
   終了: 2016年11月6日 17:06:13
PS C:\> Get-Content "C:\test10/a.txt", "C:\test20/a.txt"
hello world
hello world
PS C:\> Get-Content "C:\test10/b.txt", "C:\test20/b.txt"
hello world
hello world


PS C:\> # 今度はRobocopyを/isで実行して、同じようにファイルの中身が上書きされたか確認する
PS C:\> Robocopy.exe "C:\test10" "C:\test20"  /is /e /x /DCOPY:DAT
-------------------------------------------------------------------------------
   ROBOCOPY     ::     Windows の堅牢性の高いファイル コピー
-------------------------------------------------------------------------------
  開始: 2016年11月6日 17:06:14
   コピー元 : C:\test10\
     コピー先 : C:\test20\
    ファイル: *.*
  オプション: *.* /X /S /E /DCOPY:DAT /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月6日 17:06:14
PS C:\> Get-Content "C:\test10/a.txt", "C:\test20/a.txt"
hello world
hello world
PS C:\> Get-Content "C:\test10/b.txt", "C:\test20/b.txt"
hello world
hello world
PS C:\>

つまり、/isオプションのあるなしは、同じファイルであっても「コピー処理の対象」とするかどうか、の違いであることが分かります。

ただ、その「コピー処理の対象」の処理、というものが「先ずファイルの中身を比較してみる」ことを含んだものか、そうではなく「無条件の物理的上書き」をするものか、と言えば、この場合は前者です。

そのため、ご指摘の趣旨である「スキップ」の意味合いが「ファイルの中身が同じであれば、物理的に上書きをしていない」という意味ならば、それは確かにおっしゃる通りだと思います。

そのようなわけで、

「検証」

この例ではファイルが小さいので「スキップ」が

気がつかないのでは??

大きな5Gくらいのファイルでやってみてください

こちらも、上記ご指摘の意味としては、その通りだと思います。
以下のような処理ケースですね。

PS C:\> # 5.8GBのISOをrobocopyする
PS C:\> Robocopy.exe "C:\test30" "C:\test40"  /e /x /DCOPY:DAT
-------------------------------------------------------------------------------
   ROBOCOPY     ::     Windows の堅牢性の高いファイル コピー
-------------------------------------------------------------------------------
  開始: 2016年11月6日 17:30:27
   コピー元 : C:\test30\
     コピー先 : C:\test40\
    ファイル: *.*
  オプション: *.* /X /S /E /DCOPY:DAT /COPY:DAT /R:1000000 /W:30
------------------------------------------------------------------------------
        新しいディレクトリ       1      C:\test30\
100%      新しいファイル                   5.8 g        mu_visual_studio_2013_update_4_x86_dvd_5921353.iso
------------------------------------------------------------------------------
                  合計     コピー済み      スキップ       不一致        失敗    Extras
   ディレクトリ:         1         1         0         0         0         0
     ファイル:         1         1         0         0         0         0
      バイト:   5.820 g   5.820 g         0         0         0         0
       時刻:   0:01:17   0:01:17                       0:00:00   0:00:00
       速度:            80365558 バイト/秒
       速度:            4598.554 MB/分
   終了: 2016年11月6日 17:31:45

PS C:\> Robocopy.exe "C:\test30" "C:\test40"  /e /x /DCOPY:DAT
-------------------------------------------------------------------------------
   ROBOCOPY     ::     Windows の堅牢性の高いファイル コピー
-------------------------------------------------------------------------------
  開始: 2016年11月6日 17:31:45
   コピー元 : C:\test30\
     コピー先 : C:\test40\
    ファイル: *.*
  オプション: *.* /X /S /E /DCOPY:DAT /COPY:DAT /R:1000000 /W:30
------------------------------------------------------------------------------
                           1    C:\test30\
------------------------------------------------------------------------------
                  合計     コピー済み      スキップ       不一致        失敗    Extras
   ディレクトリ:         1         0         1         0         0         0
     ファイル:         1         0         1         0         0         0
      バイト:   5.820 g         0   5.820 g         0         0         0
       時刻:   0:00:00   0:00:00                       0:00:00   0:00:00
   終了: 2016年11月6日 17:31:45

PS C:\> Robocopy.exe "C:\test30" "C:\test40"  /is /e /x /DCOPY:DAT
-------------------------------------------------------------------------------
   ROBOCOPY     ::     Windows の堅牢性の高いファイル コピー
-------------------------------------------------------------------------------
  開始: 2016年11月6日 17:31:45
   コピー元 : C:\test30\
     コピー先 : C:\test40\
    ファイル: *.*
  オプション: *.* /X /S /E /DCOPY:DAT /COPY:DAT /IS /R:1000000 /W:30
------------------------------------------------------------------------------
                           1    C:\test30\
                  同じ             5.8 g        mu_visual_studio_2013_update_4_x86_dvd_5921353.iso
------------------------------------------------------------------------------
                  合計     コピー済み      スキップ       不一致        失敗    Extras
   ディレクトリ:         1         0         1         0         0         0
     ファイル:         1         1         0         0         0         0
      バイト:   5.820 g   5.820 g         0         0         0         0
       時刻:   0:00:00   0:00:00                       0:00:00   0:00:00
   終了: 2016年11月6日 17:31:45

PS C:\>

明らかに、物理的なコピー処理は厳密(strict)でないことが分かります。

こんな原始的な簡単な「上書き」ができないなんて。。。。

こちらについては、むしろ「できない」のでなく「しないようにしている」という動機の方が、より正しいかと思います。

そして実は私自身も、robocopyのようなsync系のコマンドを使う場面で、あえて同じ内容のファイルに物理的な上書きコピーをしなければならない理由が思い当たりません。

(どういうあり方が処理として正しいのかは、sync系コマンドをcopy系コマンドとして使わなければならない、といったような、実際の要件に出会ってみるまで、実感できないでしょう)

ですので、あくまで厳密な物理的上書きデータコピーを必要とする要件でしたら、その場合は、処理そのものの堅牢性との相談にはなりますが、むしろrobocopyよりxcopyを選択したほうがよいかもしれません。

6 ユーザーがこの回答を役に立ったと思いました。

·

この回答が役に立ちましたか?

お役に立てず、申し訳ございません。

素晴らしい! フィードバックをありがとうございました。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。おかげで、サイトの改善に役立ちます。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。

 
 

質問情報


最終更新日: 2025年2月04日 表示数 26,624 適用先: