XCopy сталкивается с нарушением обмена, как справиться
Я использую 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
Переключатель будет вести себя: он будет вести себя как "Повторить" или "Игнорировать"? (Этот вопрос уже задавался другими людьми, но эти люди получили совет сменить robocopy
, но, как уже упоминалось в этом сообщении StackOverflow, это также не так подвержено ошибкам).
Кто-нибудь знает, как заставить механизм повтора?
заранее спасибо
1 ответ
Параметр /E копирует каталоги и подкаталоги, включая пустые. Просто добавьте это, и проблема решена.
Параметр /C продолжает копирование, даже если возникают ошибки. Это должно пропустить любые проблемы.
Для уточнения, /c игнорирует ошибку и продолжает процесс копирования со следующего допустимого файла.
Если вы хотите повторить ошибки (хотя и не рекомендуется), вы можете использовать для этого цикл WHILE в пакетном файле (полезные команды: IF ERRORLEVEL = и время ожидания). Пример.