Robocopy ignorando arquivos esporadicamente

4

Eu tenho um script robocopy em execução que funciona apenas esporadicamente nas últimas semanas.

O problema

  • No diretório de origem, estou recebendo arquivos duas vezes por dia. Esse script funcionou durante anos sem problemas, mas desde ~ dezembro, duas de três vezes que o script é executado, ele ignora os arquivos.

O script

O objetivo: copiar arquivos dentro de um esquema de nomenclatura *Identifier1* para um caminho UNC e processá-los com outro aplicativo que os mova.

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

O ambiente

  • Totalmente corrigido do Windows Server 2012R2
  • Script em lote herdado, não é um script do PowerShell
  • eu disparo o script pelo agendador de tarefas com direitos elevados
  • A execução do usuário é um usuário de domínio com direitos administrativos locais
  • Eu tenho que usar o *Identifier* no script. Eu recebo dois arquivos, um sendo denominado $Timestamp_Identifier1.csv e o outro $Timestamp_Identifier2.csv . Eu só preciso copiar um deles.

O que eu tentei

  • verificou as permissões de arquivos e diretórios - o usuário que está executando o script definitivamente possui direitos de r / w. Copiar manualmente funciona perfeitamente quando remoting com suas credenciais.
  • Ativou a opção /V para obter mais resultados. Infelizmente, o robocopy nem menciona os arquivos que está ignorando no log.
  • Ativou as opções /R:5 e /W:10 para garantir que não seja um problema de carregamento
  • Tentou deixar a cópia em robocopy para um diretório local primeiro, o que resulta no mesmo comportamento de "working sometimes". São os mesmos arquivos que são ignorados se eu copiar ambos para um local e um caminho UNC no mesmo lote.

Coisas que valem a pena

  • Além do registro de data e hora, os arquivos sempre têm o mesmo esquema de nomenclatura
  • Não há diferença visível entre os arquivos que são copiados e os arquivos que não são. Isso inclui o nome e as permissões de arquivo.
  • Os arquivos são criados no diretório de origem pelo WinSCP após o download de um serviço webdav. Log diz nada de anormal.
  • o anotherapplication.exe que eu executo dentro do mesmo script pega os arquivos bem e é realmente capaz de movê-los.

Alguma idéia ou sugestão? Como sempre, muito obrigado.

    
por Patrick R. 25.01.2017 / 17:35

1 resposta

2

Robocopy ignoring files sporadically. Copying files within a naming scheme Identifier1 to a UNC path

Você pode tentar adicionar a opção /FFT ao Robocopy:

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

Robocopy Switch

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

Melhor Descrição

/FFT uses fat file timing instead of NTFS. This means the granularity is a > bit less precise. For across-network share operations this seems to be much more reliable - just don't rely on the file timings to be completely precise to the second.

Outro exemplo

Eu usei uma sintaxe semelhante à listada abaixo no passado para uma migração de muitas centenas de gigabytes de dados por servidores de arquivos usando caminhos UNC sem nenhum problema ou erros que não consegui resolver.

Considere usar o IF NOT EXIST "%destination%" mkdir "%destination%" para criar apenas o diretório, pois ele não existe. Considere também fazer um DIR /S "%sourcefile%\*Identifier1*" >> %LogFile% recursivo para colocar os detalhes no log para mostrar o caminho completo e o nome do arquivo daqueles que correspondem à convenção de nomenclatura. Dessa forma, você pode ver se o arquivo é exibido nesse comando no local esperado antes que o Robocopy comece, já que outro nível de confirmação de um arquivo existe.

/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

Adicional

  1. Você também pode considerar testar as opções /IS , /M e /A com Robocopy.
  2. Você poderia usar XCOPY com a opção /Y e /F para obter o log completo com esse método em XCOPY um simples loop FOR que parece fazer exatamente o que você precisa também

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

Tags