O xcopy e o robocopy farão o trabalho, mas a saída do robocopy está mais próxima do que você descreveu.
xcopy src dst /i /e /f /v /c > log.txt
/ F irá mostrar os caminhos completos de origem e destino.
/ V é reivindicado para verificar os tamanhos dos arquivos, mas não os imprime na saída.
Além de não ter os tamanhos de arquivo registrados, isso geralmente atinge o que você descreveu. Existem outras opções que podem controlar se as ACLs e os atributos são copiados. Sendo um exe nativo, será mais rápido que um loop de script. Mas você não obterá um log de erros separado e não poderá anular uma subpasta e continuar com a próxima subpasta por erro (/ C continua todos os arquivos em erro).
Exemplo de saída:
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)
O Robocopy produz um log bastante detalhado, incluindo tamanhos de arquivo. Experimente:
robocopy src dst /e /np /log:log.txt [/tee]
Exemplo de saída:
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
Caso contrário, para fazer o script da iteração você precisaria de quatro loops aninhados, como:
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
)
)
)
Isso só copiará os arquivos nas sub_sub_sub_folders: todos os arquivos em pastas de nível superior serão ignorados, porque for /d
somente itera em diretórios.