XCopy сталкивается с нарушением обмена, как справиться

5753
Dominique

Я использую 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
Ну, может, причина использования robocopy в том, что в ней нет этой ошибки? Я знаю, что по умолчанию robocopy повторяет что-то около 100 000 раз. djsmiley2k 7 лет назад 0
Миллиард повторных попыток не принесет пользы, если ошибка не исчезнет. Overmind 7 лет назад 1
Просто для вашего сведения: я изменил сообщение, поскольку проблема пустых каталогов была решена в это время. Dominique 7 лет назад 0
Уже выложили решение для этого. Overmind 7 лет назад 0
@ Overmind: действительно, ты прав. К сожалению, проблема не воспроизводима, и это происходит на разных файлах, по-видимому, случайно. Я считаю, что есть какой-то процесс, который очень быстро что-то делает с файлом (например, делает резервную копию или около того), и в этот конкретный момент у xcopy есть проблема. Простая повторная попытка (возможно, после ожидания одной секунды) может решить эту проблему. Dominique 7 лет назад 0
Пример повтора здесь: http://lichao.net/eblog/how-to-use-loop-function-in-dos-to-re-try-command-200909380.html; вы можете использовать что-то подобное + команду timeout (чтобы задержать повтор, сколько секунд вы считаете необходимыми). Overmind 7 лет назад 0

1 ответ на вопрос

1
Overmind

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

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

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

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

спасибо за ответ, но я решил не использовать его: я работаю с пакетными файлами, используя более 100 команд xcopy. Кроме того, команды xcopy содержат сложные структуры каталогов, дублирование которых ставит под угрозу качество пакетных файлов. Поэтому я решил пойти по другому пути: файлы, вызывающие проблемы, расположены в одном конкретном сетевом расположении, и я попросил своего сетевого администратора установить файловый монитор для каждого файла. Как только проблема возникнет снова, мы сравним результаты мониторинга файлов с временными метками в журнале результатов моего пакетного файла. Dominique 7 лет назад 0
Это была хорошая идея; Мониторинг параметров является первым шагом, который следует предпринять. Лучше знать причину, а не обходить ее. Overmind 7 лет назад 0