
다음과 같은 구조에 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_folderA
14개 파일 속성을 모두 읽고 복사하여 에 붙여넣고 Z:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderA
log.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의 파일만 복사됩니다. 디렉터리에 대해서만 반복하므로 상위 수준 폴더의 모든 파일은 무시됩니다 .