4

У меня запущен скрипт Robocopy, который работал спорадически только в последние несколько недель.

Эта проблема

  • В исходном каталоге я получаю файлы два раза в день. Этот сценарий работал безупречно в течение многих лет, но, начиная с декабря, два раза из трех он запускает файлы, которые игнорируются.

Сценарий

Цель: копировать файлы в схеме именования *Identifier1* в UNC-путь, а затем обрабатывать их с помощью другого приложения, которое их перемещает.

set sourcefile=D:\some\local\path\here\
set destination=\\someip\some\path\
mkdir %destination%
robocopy %sourcefile% %destination% *Identifier1* /V /R:5 /W:10 >> %Logfile%

wait 60  
anotherapplication.exe

Окружающая среда

  • Полностью исправлена Windows Server 2012R2
  • Устаревший пакетный скрипт, а не скрипт powershell
  • Я запускаю скрипт через планировщик задач с повышенными правами
  • Выполнение пользователя - это пользователь домена с локальными административными правами.
  • Я должен использовать *Identifier* в сценарии. Я получаю два файла, один из которых называется $Timestamp_Identifier1.csv а другой - $Timestamp_Identifier2.csv . Мне нужно только скопировать один из них.

Что я пробовал

  • проверил разрешения как для файлов, так и для каталогов - у пользователя, который запускает скрипт, определенно есть права на чтение. Копирование вручную прекрасно работает при удаленном взаимодействии с его учетными данными.
  • Включил переключатель /V чтобы получить больше вывода. К сожалению, robocopy даже не упоминает файлы, которые игнорирует в журнале.
  • Включены переключатели /R:5 и /W:10 чтобы убедиться, что это не проблема загрузки
  • Пытался сначала скопировать robocopy в локальный каталог, что приводит к тому же поведению "иногда работает". Это те же файлы, которые игнорируются, если я копирую и в локальный, и в UNC-путь в одном пакете.

Вещи, которые стоит отметить

  • Помимо метки времени, файлы всегда имеют одинаковую схему именования
  • Нет видимой разницы между копируемыми файлами и файлами, которые этого не делают. Это включает их имя и права доступа к файлу.
  • Файлы создаются в исходной директории WinSCP после загрузки из webdav-сервиса. Лог ничего необычного не говорит.
  • anotherapplication.exe который я запускаю в одном и том же скрипте, прекрасно берет файлы и действительно способен их перемещать.

Есть идеи или намеки? Как всегда, большое спасибо.

1 ответ1

2

Robocopy игнорирует файлы время от времени. Копирование файлов в схеме именования Identifier1 в UNC-путь

Вы можете попробовать добавить ключ /FFT с помощью Robocopy:

robocopy /FFT %sourcefile% %destination% *Identifier1* /V /R:5 /W:10 >> %Logfile%

Robocopy Switch

/FFT : Assume FAT File Times (2-second date/time granularity).

Лучшее описание

/FFT использует толстую синхронизацию файлов вместо NTFS. Это означает, что детализация> немного менее точна. Для операций с сетевым общим доступом это кажется намного более надежным - просто не полагайтесь на временные характеристики файлов, чтобы быть абсолютно точными с точностью до секунды.


Другой пример

Я использовал аналогичный синтаксис, который был приведен ниже в прошлом, для переноса файлового сервера на многие сотни гигов данных с использованием путей UNC без каких-либо проблем или ошибок, которые я не мог разрешить.

Подумайте об использовании IF NOT EXIST "%destination%" mkdir "%destination%" чтобы только сделать каталог, если он не существует. Также рассмотрите возможность выполнения рекурсивного DIR /S "%sourcefile%\*Identifier1*" >> %LogFile% чтобы поместить подробности в журнал, чтобы показать полный путь и имя файла тех, которые соответствуют соглашению об именах. Таким образом, вы можете увидеть, отображается ли файл в этой команде в ожидаемом месте еще до того, как Robocopy начнет работу, поскольку существует еще один уровень подтверждения наличия файла.

/ZB :: use restartable mode; if access denied use Backup mode.

IF NOT EXIST "%destination%" mkdir "%destination%"
DIR /S "%sourcefile%\*Identifier1*" >> %LogFile%
robocopy /FFT %sourcefile% %destination% *Identifier1* /ZB /SEC /COPYALL /SECFIX /R:5 /W:5 /LOG+:%LogFile% /V

дополнительный

  1. Вы можете также рассмотреть возможность тестирования переключателей /IS , /M и /A с Robocopy.
  2. Вы могли бы потенциально использовать XCOPY с переключателями /Y и /F чтобы получить полное ведение журнала с помощью этого метода в простом цикле FOR, который, кажется, будет делать именно то, что вам нужно.

    FOR %%A IN ("%sourcefile%\*Identifier1*") DO XCOPY /Y /F "%%~F" "%destination%\">> %Logfile%
    

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