Я использую следующий командный файл для запуска моей команды 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

Это помогло мне записать все детали, которые я искал, за исключением того, что в нем не были записаны имена пропущенных / неудачных файлов. Существует ли команда скрипт / robocopy / любой другой способ записать имена пропущенных / неудачных файлов, чтобы помочь мне определить такие файлы. Это становится действительно трудно определить такие файлы для большого объема передачи файлов по сети.

Наиболее близкий, который я пришел к подобному вопросу, - это, но даже у этого не было никаких принятых / рабочих ответов

РЕДАКТИРОВАТЬ 1: Согласно комментарию Камена Минкова, я включил /v (многословный) в моей команде robocopy). Когда я преднамеренно потерпел неудачу при передаче файла, он регистрировал ошибку (историю повторных попыток), но это делает файл журнала все более трудным для интерпретации. Такой же случай наблюдался даже без /v. Я просто хочу, чтобы имя файла с ошибкой передачи было зарегистрировано как неудачное в моем файле журнала .txt

РЕДАКТИРОВАТЬ 2: В соответствии с ответом JosefZ, я запустил следующий код:

@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"

Это дало мне следующую ошибку после передачи всех файлов (я отключил сетевой кабель для сбоя нескольких файлов, поэтому были сбойные файлы):

FINDSTR: невозможно открыть D:\ABC\log\ErrorLog_20151029_1035.log

РЕДАКТИРОВАТЬ 3: вышеуказанная ошибка произошла, потому что я неправильно упомянул имя файла журнала для кода выхода. Правильный код (как ответил 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"

2 ответа2

2

В соответствии с robocopy /? (или описание robocopy.exe ) и коды выхода ROBOCOPY, используйте:

  • /V выводит подробный вывод, показывая пропущенные файлы;
  • /R:0 (без повторных попыток) ускорит копирование, пропуская любые используемые файлы и сводит описание любой случайной конкретной ошибки в файле журнала к единственному вхождению (это облегчает последующее исследование или причину ошибки);
  • if errorlevel 8 findstr "^[0-9,a-Z]" "D:\logs\log_%ts:~0,8%.log" объяснение:
    • errorlevel больше 7 указывает, что во время операции копирования произошел как минимум один сбой;
    • findstr "^[0-9,a-Z]" ... отображает только зарегистрированные ошибки, например
      2015/10/28 17:27:55 ERROR 32 (0x00000020) Copying File [source]\file.ext
      The process cannot access the file because it is being used by another process.
  • (косметическая ошибка) /w:10 кажется избыточным в случае /r:0 .

Код:

@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"
1

Согласно этой статье, вы можете попробовать опцию /v .

(...) Производит подробный вывод и показывает все пропущенные файлы.

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