1

Я использую xcopy для копирования больших пакетов файлов. В xcopy мне особенно нравится параметр /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 : будет ли он вести себя как "Retry" или "Ignore"? (Этот вопрос уже задавался другими людьми, но эти люди получили совет перейти на robocopy , но, как упоминалось в этом сообщении StackOverflow , это также не так подвержено ошибкам).

Кто-нибудь знает, как заставить механизм повтора?

заранее спасибо

1 ответ1

1

Параметр /E копирует каталоги и подкаталоги, включая пустые. Просто добавьте это, и проблема решена.

Параметр /C продолжает копирование, даже если возникают ошибки. Это должно пропустить любые проблемы.

Для уточнения, /c игнорирует ошибку и продолжает процесс копирования со следующего допустимого файла.

Если вы хотите повторять попытки при ошибках (хотя и не рекомендуется), вы можете использовать для этого цикл WHILE в пакетном файле (полезные команды: IF ERRORLEVEL = и время ожидания). Пример.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .