У меня есть более 1 миллиона (небольшого размера) файлов (<500kB jpg) в такой структуре:

H:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folder

Каждая папка sub_sub_sub_folder имеет 10-15 файлов, sub_sub_folder может быть отметкой даты / времени, sub_folder - имя_компьютера, а папка - другое увеличенное число.

Мне нужна копия main_folder с той же структурой, но я должен убедиться, что моя копия на 100% совпадает с исходной. Проводник Windows заблокирует после ~ 1000 копий, даже не показывает свойства (размер, размер на диске, содержит).

Мне нужен пакет, который будет идти в H:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderA читать и копировать все 14 атрибутов файлов и вставлять их в Z:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderA , открывать файл log.xt записывать:

«file1.jpg 490 КБ скопировано из папки H:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderA в Z:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderA успешно ...»

а также

"file15.jpg 470 КБ скопировано из папки H:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderA в Z:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderA успешно"

так далее

отметьте конец журнала (одна строка ====== или что-то в этом роде) и только затем переходите к следующей операции (скопируйте содержимое и структуру папок sub_sub_sub_folderB). Если операция копирования не была успешно завершена, остановите, создайте новый журнал error_sub_sub_sub_folderB.txt (следующий журнал будет error_sub_sub_sub_folderZ.txt) и только после создания журнала перейдите к следующей sub_sub_sub_folder

В двух словах: пошаговое ведение журнала копий, которое не убивает систему или аппаратные ресурсы машины.

1 ответ1

0

И xcopy, и robocopy сделают эту работу, но результаты robocopy ближе к тому, что вы описали.

xcopy src dst /i /e /f /v /c > log.txt

/F выведет полный путь источника и назначения.

/V, как утверждается, проверяет размеры файлов, но не выводит их в выводе.

Помимо отсутствия зарегистрированных размеров файлов, это в основном дает то, что вы описали. Существуют и другие коммутаторы, которые могут управлять копированием списков ACL и атрибутов. Будучи нативным exe, это будет быстрее, чем цикл скриптов. Но вы не получите отдельный журнал ошибок, вы не можете прервать подпапку и перейти к следующей подпапке при ошибке (/C продолжает все файлы при ошибке).

Образец вывода:

C:\Users\Celery\test>xcopy src dst /i /e /f /v /c
C:\Users\Celery\test\src\a\blah.txt -> C:\Users\Celery\test\dst\a\blah.txt
C:\Users\Celery\test\src\a\blah2.txt -> C:\Users\Celery\test\dst\a\blah2.txt
C:\Users\Celery\test\src\b\blah.txt -> C:\Users\Celery\test\dst\b\blah.txt
C:\Users\Celery\test\src\b\blah2.txt -> C:\Users\Celery\test\dst\b\blah2.txt
4 File(s)

Robocopy создает довольно подробный журнал, включая размеры файлов. Пытаться:

robocopy src dst /e /np /log:log.txt [/tee]

Образец вывода:

C:\Users\Celery\test>robocopy src dst /e

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows

-------------------------------------------------------------------------------

  Started : Thursday, 22 January 2015 10:58:55 PM
   Source : C:\Users\Celery\test\src\
     Dest : C:\Users\Celery\test\dst\

    Files : *.*

  Options : *.* /S /E /DCOPY:DA /COPY:DAT /R:1000000 /W:30

------------------------------------------------------------------------------

          New Dir          0    C:\Users\Celery\test\src\
          New Dir          2    C:\Users\Celery\test\src\a\
            New File                  17        blah.txt
            New File                  17        blah2.txt
          New Dir          2    C:\Users\Celery\test\src\b\
            New File                  17        blah.txt
            New File                  17        blah2.txt

------------------------------------------------------------------------------

               Total    Copied   Skipped  Mismatch    FAILED    Extras
    Dirs :         3         3         0         0         0         0
   Files :         4         4         0         0         0         0
   Bytes :        68        68         0         0         0         0
   Times :   0:00:00   0:00:00                       0:00:00   0:00:00


   Speed :                2193 Bytes/sec.
   Speed :               0.125 MegaBytes/min.
   Ended : Thursday, 22 January 2015 10:58:55 PM

В противном случае, чтобы написать скрипт итерации самостоятельно, вам понадобятся четыре вложенных цикла, например:

for /d %%a in (main_folder\*) do (
  for /d %%b in (%%a\*) do (
    for /d %%c in (%%b\*) do (
      for /d %%d in (%%c\*) do (
        :: code to copy files and write logs goes here
      )
      echo ================= end of %%d =============== >> log.txt
    )
  )
)

Это будет копировать только файлы в sub_sub_sub_folders: любые файлы в папках более высокого уровня будут игнорироваться, потому что for /d перебирает только каталоги.

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