파일 및 폴더 구조를 하나씩 복사하는 배치 파일, 결과 확인 및 보고서를 txt에 저장

파일 및 폴더 구조를 하나씩 복사하는 배치 파일, 결과 확인 및 보고서를 txt에 저장

다음과 같은 구조에 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는 machine_name이고 폴더는 또 다른 증분 숫자입니다.

동일한 구조를 가진 main_folder의 복사본이 필요하지만 내 복사본이 소스와 100% 동일한지 확인해야 합니다. Windows 탐색기는 최대 1000개 복사본 이후에 차단되며 속성(크기, 디스크 크기, 포함)도 표시하지 않습니다.

H:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderA14개 파일 속성을 모두 읽고 복사하여 에 붙여넣고 Z:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderAlog.txt 파일을 열고 다음을 작성하는 배치가 필요합니다 .

"file1.jpg 490kB가 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 470kB가 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

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
    )
  )
)

for /d그러면 sub_sub_sub_folders의 파일만 복사됩니다. 디렉터리에 대해서만 반복하므로 상위 수준 폴더의 모든 파일은 무시됩니다 .

관련 정보