xcopy и Robocopy удаляют целевой файл

Я пытаюсь скопировать некоторые файлы с одного сервера в общую папку другого, дело в том, что иногда это работает, но довольно часто команды xcopy и robocopy удаляют целевой файл при сбое, даже если резервное копирование не удается, мне нужно, чтобы файлы оставались там.

Чтобы получить более подробную информацию, на сервере, на котором я запускаю команды (Windows 10), у меня есть куча файлов Tableau (.twbx), которые обновляются с помощью файла .JAR, который я запускаю каждое утро с помощью запланированной задачи.

После обновления файлов я копирую их на общий ресурс другого сервера с помощью xcopy (позже я попробовал Robocopy, чтобы увидеть, перестает ли проблема возникать), но когда я проверяю утром, целевой файл отсутствует. Он работает спорадически, проблема в том, что мне нужно, чтобы эти файлы всегда находились в общей папке.

Мой .bat файл выглядит так:

Я последовательно запускаю команды копирования (по одной для каждого файла, поскольку они находятся в разных папках).

Robocopy E:\Tableau\TableauFileFolder \\shareserver\sharefolder\Tableau\TableauFileFolder TableauFile.twbx /mt /r:0 /log+:E:\Tableau\LogFile.log
Robocopy E:\Tableau\TableauFileFolder2 \\shareserver\sharefolder\Tableau\TableauFileFolder2 TableauFile2.twbx /mt /r:0 /log+:E:\Tableau\LogFile.log
Etc...

Для xcopy я использую:

xcopy /s/y E:\Tableau\TableauFileFolder\TableauFile.twbx \\shareserver\sharefolder\K2BAnalytics\TableauFileFolder

Структура каталогов такая же, на сервере, где я запускаю команды, которые у меня есть:

E:
  |-->Tableau
    |-->ShareFileFolder
      |-->ShareFile.twbx
    |-->ShareFileFolder2
      |-->ShareFile2.twbx

Поделиться сервером:

sharefolder:
  |-->Tableau
    |-->ShareFileFolder
      |-->ShareFile.twbx
    |-->ShareFileFolder2
      |-->ShareFile2.twbx

Мой файл журнала показывает эту ошибку в недостающих файлах:

2020/11/19 04:31:57 ERROR 0 (0x00000000) r E:\Tableau\TableauFileFolder\TableauFile.twbx
The operation completed successfully.

Пользователь-администратор, выполняющий команды, имеет разрешение на полный контроль над папкой Tableau общего ресурса.

У меня была эта проблема некоторое время, и я нигде не могу найти решение. Я не использую / MIR, поэтому не знаю, что могло вызвать удаление файлов назначения.


person Adrian G    schedule 19.11.2020    source источник
comment
Ваша RoboCopy команда не удаляет ничего в месте назначения, потому что единственными параметрами, которые могут это сделать, должны быть /PURGE и /MIR, (/MOV и /MOVE могут удалить из источника), и вы не используя любой из них!   -  person Compo    schedule 19.11.2020
comment
Я знаю, но тогда почему мои файлы пропадают? Это проблема с перезаписью файлов? Иногда файл копируется успешно, но часто некоторые файлы просто исчезают после выполнения запланированного задания.   -  person Adrian G    schedule 19.11.2020
comment
Перезапись файла по самой своей природе означает, что он должен существовать как до, так и после. Вы имеете в виду, что один или несколько файлов не копируются? поскольку это отличается от удаляемых файлов, (и в таких случаях, безусловно, будет менее полезно запрашивать отсутствие повторных попыток).   -  person Compo    schedule 19.11.2020


Ответы (2)


Как люди предлагали в комментариях, я позволил Robocopy сделать несколько попыток, используя / R: n, что помогло значительно смягчить проблему, но все же не является безошибочным. Некоторые предлагали использовать более умную задачу копирования файлов, но я не знаю хороших альтернатив Robocopy.

Мои команды теперь такие:

Robocopy E:\Tableau\TableauFileFolder \\shareserver\sharefolder\Tableau\TableauFileFolder TableauFile.twbx /mt /r:5 /w:10 /log+:E:\Tableau\LogFile.log
person Adrian G    schedule 25.11.2020

robocopy source target /b /MT:1 запуск с правами администратора может помочь вам.

В моем аналогичном случае исходный файл был заблокирован другим процессом и:

  • /b заставляет robocopy оставить целевой файл нетронутым, если он не может получить к нему доступ (но для этого требуются права администратора)
  • /mt:<n> или просто /mt заставляет robocopy заметить ОШИБКУ 0 и повторить попытку.

Когда я запускаю robocopy вручную, я просто использую robocopy source target /MT:1 - увидев ошибку, я могу остановить приложение, блокирующее файл, и запустить его после того, как я закончу.

Официальные документы: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy

person BtF    schedule 01.06.2021