web-dev-qa-db-ja.com

XCopyで共有違反が発生しました、処理方法

ファイルの大きなバンドルをコピーするためにxcopyを使用しています。 xcopyについて私が特に気に入っていることの1つは、/Fスイッチです。このスイッチは、すべてのソースファイルと宛先ファイル、含まれているパスを次のように表示します。

xcopy /E /Y /F D:\Temp_Folder\test_Origin\* D:\Temp_Folder\test_dest\
D:\Temp\Origin\B_Normal\blabla.txt -> D:\Temp\dest\B_Normal\blabla.txt
D:\Temp\Origin\B_Normal\B.A\normal.txt -> D:\Temp\dest\B_Normal\B.A\normal.txt
D:\Temp\Origin\B_Normal\B.B\drawing.bmp -> D:\Temp\dest\B_Normal\B.B\drawing.bmp
D:\Temp\Origin\C_Fill_with_empty\empty.bmp -> D:\Temp\dest\C_Fill_with_empty\empty.bmp
D:\Temp\Origin\C_Fill_with_empty\empty.txt -> D:\Temp\dest\C_Fill_with_empty\empty.txt
5 File(s) copied

ただし、いくつかの問題があるようです:

D:\Temp\Origin>tree /F /A
...
D:.
+---A_Empty
+---B_Normal
|   |   blabla.txt
|   |
|   +---B.A
|   |       normal.txt
|   |
|   \---B.B
|           Drawing.bmp
|
\---C_Fill_with_empty
    |   empty.bmp
    |   empty.txt
    |
    \---empty

ご覧のとおり、ディレクトリD:\Temp\Origin\A_Empty\D:\Temp\Origin\C_Fill_with_empty\empty\はコピーされていないようです(空のディレクトリではなく、空のファイルがコピーされているようです)。

ただし、これは真実ではありません。宛先フォルダには、ディレクトリA_emptyおよびC_Fill_with_empty\emptyがありますが、/Fスイッチはコピーされたファイルのみを表示するため、空のディレクトリのコピーは完了しましたが、表示されていません。 (私の元の投稿では、空のディレクトリはコピーされていないと思いました)

最も重要なのは、/Cスイッチの意味がわからないことです。

エラーが発生してもコピーを続行します。

昨夜、束のコピーのxcopy結果はエラーメッセージでした:

\\nas\<Complicated_Directory_Tree>\<file1>.gif -> G:\<Complicated_Directory_Tree>\<file1>.gif
\\nas\<Complicated_Directory_Tree>\<file2>.gif -> G:\<Complicated_Directory_Tree>\<file2>.gif
Sharing violation

再試行メカニズムを使用して、この再現不可能なエラーメッセージを回避したいのですが、/Cスイッチがどのように動作するかわかりません。「再試行」または「無視」として動作しますか? (この質問はすでに他の人から尋ねられていますが、それらの人はrobocopyに変更するようにアドバイスを受けましたが、 このStackOverflowの投稿 で述べたように、これもエラーが発生しにくいようです)。

再試行メカニズムを強制する方法を知っている人はいますか?

前もって感謝します

2
Dominique

/ Eパラメータは、空のものを含むディレクトリとサブディレクトリをコピーします。それを追加するだけで、問題は解決します。

/ Cパラメーターは、エラーが発生した場合でもコピーを続行します。それはどんな問題もスキップするはずです。

詳細を説明すると、/ cはエラーを無視し、次の有効なファイルでコピープロセスを続行します。

エラーを再試行する場合(推奨されませんが)、バッチファイルでWHILEループを使用できます(便利なコマンド:IF ERRORLEVEL=およびtimeout)。

2
Overmind