Robocopy: nomes de log de arquivos ignorados / com falha

0

Estou usando o seguinte arquivo em lote para executar meu comando robocopy:

@ECHO OFF
for /f %%a in ('wmic os get LocalDateTime ^| findstr ^[0-9]') do (set ts=%%a)
robocopy [source] [target] /log+:D:\logs\log_%ts:~0,8%.log /e /xo /w:10 /r:1000 /z /NP
robocopy [source] [target] /log+:D:\logs\log_%ts:~0,8%.log /e /xo /w:10 /r:1000 /z /NP

Isso me ajudou a registrar todos os detalhes que eu estava procurando, exceto que ele não registrava os nomes dos arquivos ignorados / com falha. Existe um script / comando robocopy / qualquer outra maneira de registrar os nomes dos arquivos ignorados / com falha para me ajudar a determinar esses arquivos. Torna-se realmente difícil determinar esses arquivos para um grande volume de transferência de arquivos pela rede.

O mais próximo que cheguei a uma pergunta semelhante é isso , mas mesmo isso não teve nenhuma resposta aceita / trabalhada

EDIT 1: De acordo com o comentário de Kamen Minkov, incluí / v (verbose) no meu comando robocopy). Quando eu propositadamente falhei na transferência de arquivos, ele registrou o erro (histórico de novas tentativas), mas isso torna o arquivo de log cada vez mais difícil de interpretar. O mesmo caso foi observado mesmo sem / v. Eu só quero que o nome do arquivo de transferência com falha seja registrado como falhado uma vez no meu arquivo de log .txt

EDIT 2: De acordo com a resposta de JosefZ, eu corri o seguinte código:

@ECHO OFF
for /f %%a in ('wmic os get LocalDateTime ^| findstr ^[0-9]') do (set ts=%%a)
robocopy [source] [target] /log+:D:\logs\log_%ts:~0,8%.log /e /xo /w:10 /r:0 /z /NP /V
if errorlevel 8 findstr "^[0-9,a-Z]" "D:\logs\log_%ts:~0,8%.log"

Isso me deu um erro após a transferência de todos os arquivos (desconectei o cabo de rede para reprovar alguns arquivos, então houve arquivos com falha):

FINDSTR: Cannot open D:\ABC\log\ErrorLog_20151029_1035.log

EDIT 3: O erro acima ocorreu porque eu mencionei incorretamente o nome do arquivo de log para o código de saída. O código correto é (Como respondido por JosefZ):

@ECHO OFF
for /f %%a in ('wmic os get LocalDateTime ^| findstr ^[0-9]') do (set ts=%%a)
robocopy [source] [target] /log+:D:\ABC\log\log_%ts:~0,8%_%ts:~8,4%.log /e /xo /w:10 /r:2 /z /NP /V /TEE
if errorlevel 8 findstr "^[0-9,a-Z]" "D:\ABC\log\log_%ts:~0,8%_%ts:~8,4%.log"
    
por Yash Saraiya 28.10.2015 / 12:58

2 respostas

1

Como por robocopy /? (ou descrição do robocopy.exe ) e Códigos de saída do ROBOCOPY , use:

  • /V produz resultados verbosos, mostrando arquivos ignorados;
  • /R:0 (sem repetição) acelerará a cópia ignorando quaisquer arquivos em uso e reduz a descrição de qualquer erro específico incidental no arquivo de log para a única ocorrência (isso facilita a investigação ou causa de erro subsequente) ;
  • if errorlevel 8 findstr "^[0-9,a-Z]" "D:\logs\log_%ts:~0,8%.log" explicação:
    • errorlevel maior que 7 indica que houve pelo menos uma falha durante a operação de cópia;
    • findstr "^[0-9,a-Z]" ... exibe apenas erros registrados, por exemplo, 2015/10/28 17:27:55 ERROR 32 (0x00000020) Copying File [source]\file.ext e The process cannot access the file because it is being used by another process.
  • (erro estético) /w:10 parece ser superabundante no caso de /r:0 .

O código:

@ECHO OFF
for /f %%a in ('wmic os get LocalDateTime ^| findstr ^[0-9]') do (set ts=%%a)
robocopy [source] [target] /log+:D:\logs\log_%ts:~0,8%.log /e /xo /w:10 /r:0 /z /NP /V
if errorlevel 8 findstr "^[0-9,a-Z]" "D:\logs\log_%ts:~0,8%.log"
    
por 28.10.2015 / 18:12
0

De acordo com este artigo , talvez você queira para experimentar a opção /v .

(...) Produces verbose output, and shows all skipped files.

    
por 28.10.2015 / 13:13