web-dev-qa-db-ja.com

robocopyで/ mir / xdスイッチを使用しているときに宛先のサブディレクトリを除外する方法

あるボリュームから別のボリュームに一連のフォルダーをミラーリングするスクリプトが実行されています。問題は、元のミラーリングスクリプトの一部ではない宛先のフォルダー内にサブディレクトリが存在することです。これらはスタンドアロンのサブディレクトリであり、ミラーリングが開始された後に削除されたくないです。robocopyで/xdスイッチを使用して、宛先サブディレクトリを除外できる方法はありますか。

例:

robocopy "\\hq04t2fis202\archive\dr" "\\hq04t3fis202\archive\dr" /mir /xd "\\hq04t3fis202\archive\dr\*\hq04s2dba301"

上記の例では、\\hq04t2fis202\archive\drの下にいくつかのディレクトリがミラーリングされています。そして、宛先では、これらのディレクトリがソースからミラーリングされると、それらの各ディレクトリ内の個別のサブディレクトリをダンプする別のスクリプトがあります。そのため、/ xdスイッチを使用して、宛先でこれらのサブディレクトリが削除されないようにします。また、上記の例の/xdスイッチでは、"*"ワイルドカードを使用して、"\\hq04t3fis202\archive\dr"ルートフォルダーにあるすべてのディレクトリを含めることを意味しています。先。

これが可能かどうか、また可能であればどうすればよいかについてのヘルプと提案が必要です。これまで、/xo/xxのような他の多くのスイッチを試し、テストしましたが、どれも私の目的を解決しません。また、/xxは、宛先のフォルダーをまったく削除せず、ミラーリングしないことを除いて機能します。

うまくいけば、私はここでみんなを混乱させないでください。ご質問があればお知らせください。

20
Umang M

/ XDを使用してソリューションを試したところ、除外するパスは宛先ではなくソースパスでなければなりません。

例えばこの作品

robocopy c:\test\a c:\test\b /MIR /XD c:\test\a\leavethisdiralone\
26
Lars Meldgård

除外するソースに空のディレクトリを作成するのではなく、/ XDスイッチに完全な宛先パスを指定して、宛先ディレクトリをそのままにすることができます

robocopy "%SOURCE_PATH%" "%DEST_PATH%" /MIR /XD "%DEST_PATH%"\hq04s2dba301
6
psaxton

/ mirの使用中に宛先ディレクトリを除外する方法は、宛先ディレクトリもソースに存在することを確認することです。ソースドライブに移動し、宛先と同じ名前の空のディレクトリを作成し、そのディレクトリ名を/ xdに追加しました。ソース上のディレクトリを除外しながら、すべてを正常にミラーリングしたため、宛先上のディレクトリはそのまま残ります。

4
Mick Pletcher

引数の順序は重要なようです...サブディレクトリを除外するために、私は使用しました

robocopy \\source\folder C:\destinationfolder /XD * /MIR

...そしてそれは私のために働いています(Windows Server 2016からのWindows 10のコピー)

2
Keith Gray

問題は、スキップリストにフォルダを追加しても、存在しない場合は削除されることです。

解決策は、フルパスで宛先とソースの両方のフォルダを追加することです。

私の経験に基づいて、さまざまなシナリオと以下で何が起こるかを説明しようとします。

開始フォルダー構造:

d:\Temp\source\1.txt
d:\Temp\source\2\2.txt

コマンド:

robocopy D:\Temp\source D:\Temp\dest /MIR

これにより、欠落しているすべてのファイルとフォルダーがコピーされ、ソースで見つからないすべてのファイルとフォルダーが削除されます

新しいフォルダーを追加してから、コマンドに追加してスキップします。

新しい構造:

d:\Temp\source\1.txt
d:\Temp\source\2\2.txt
d:\Temp\source\3\3.txt

コマンド:

robocopy D:\Temp\source D:\Temp\dest /MIR /XD "D:\Temp\source\3"        

ソースフォルダーに/ XDを追加してコマンドを実行すると、コマンドはコピーされません。

この設定を取得するために宛先にフォルダを追加します:

d:\Temp\source\1.txt
d:\Temp\source\2\2.txt
d:\Temp\source\3\3.txt

d:\Temp\dest\1.txt
d:\Temp\dest\2\2.txt
d:\Temp\dest\3\4.txt

コマンドを実行しても問題ありません。4.txtはそのままで、3.txtはコピーされません。すべてが順調。

しかし、ソースを削除する場合フォルダー "d:\ Temp\source\3" その後、宛先フォルダーとファイルは削除されますスキップリストにある場合でも

                       1    D:\Temp\source\
    *EXTRA Dir        -1    D:\Temp\dest\3\
      *EXTRA File                  4        4.txt
                       1    D:\Temp\source\2\

代わりに宛先フォルダーをスキップするようにコマンドを変更すると、フォルダーがソースにない場合、フォルダーは削除されません。

robocopy D:\Temp\source D:\Temp\dest /MIR /XD "D:\Temp\dest\3"

一方、フォルダーが存在し、ファイルがある場合、それらをコピーして削除します。

                       1    D:\Temp\source\3\
          *EXTRA File                  4        4.txt
100%        New File                   4        3.txt

ソースまたは宛先フォルダーが欠落している場合でもフォルダーが常にスキップされ、ファイルがコピーされないようにするには、両方をスキップリストに追加する必要があります:

robocopy D:\Temp\source D:\Temp\dest /MIR /XD "d:\Temp\source\3" "D:\Temp\dest\3"

この後、ソースフォルダーが見つからないか、宛先フォルダーが見つからない場合は、robocopyはそのまま残します。

0
Crick3t