XCopy encontra uma violação de compartilhamento, como manipular

1

Estou usando xcopy para copiar grandes pacotes de arquivos. Uma coisa que eu particularmente gosto sobre o xcopy é a opção /F que mostra todos os arquivos de origem e destino, caminhos incluídos, algo como:

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

No entanto, parece haver alguns problemas:

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

Como você pode ver, os diretórios D:\Temp\origin\A_Empty\ e D:\Temp\origin\C_Fill_with_empty\empty\ parecem não ter sido copiados (arquivos vazios parecem ser copiados, não diretórios vazios).

No entanto, isso não é verdade: na pasta de destino, os diretórios A_empty e C_Fill_with_empty\empty estão lá, mas a opção /F mostrou apenas os arquivos que foram copiados, portanto a cópia dos diretórios vazios é feita, mas não mostrado. (Na minha postagem original, achei que os diretórios vazios não foram copiados)

Mais importante, não entendo o significado da opção /C , que diz

Continues copying even if errors occur.

Ontem à noite, o resultado de xcopy de uma cópia do grupo foi uma mensagem de erro:

\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

Eu gostaria de evitar essa mensagem de erro irreproduzível, usando um mecanismo de repetição, mas não sei como a opção /C se comportará: ela se comportará como "Repetir" ou "Ignorar"? (Esta pergunta já foi feita por outras pessoas, mas essas pessoas receberam o conselho de mudar para robocopy , mas como mencionado em este post StackOverflow , também isso não parece tão propenso a erros.

Alguém sabe como forçar um mecanismo de repetição?

Obrigado antecipadamente

    
por Dominique 11.04.2017 / 12:07

1 resposta

1

O parâmetro / E copia diretórios e subdiretórios, incluindo os vazios. Apenas adicione isso, e o problema está resolvido.

O parâmetro / C continua copiando, mesmo se ocorrerem erros. Isso deve evitar problemas.

Para elaborar, o / c ignora o erro e continua o processo de cópia com o próximo arquivo válido.

Se você quiser novas tentativas em erros (embora não seja recomendado), pode usar um loop WHILE no arquivo em lote para isso (comandos úteis: SE ERRORLEVEL = e tempo limite ) . Exemplo .

    
por 11.04.2017 / 13:22