Arquivo em lote para copiar arquivos e pastas estrutura um por um, verificar o resultado e salvar o relatório em txt

0

Eu tenho mais de um milhão de arquivos (tamanho pequeno) (< 500kB jpg) em uma estrutura como esta:

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

Cada sub_sub_sub_folder tem 10-15 arquivos, sub_sub_folder pode ser um carimbo de data / hora, sub_folder é um machine_name e a pasta é outro número incrementado.

Eu preciso ter uma cópia de main_folder com a mesma estrutura, mas preciso verificar se minha cópia é 100% igual à origem. O Windows Explorer irá bloquear após ~ 1000 cópias, nem mesmo mostrar as propriedades (tamanho, tamanho no disco, contém).

Eu preciso de um lote que vá para H:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderA ler e copiar todos os 14 arquivos e cole-os em Z:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderA , abra um arquivo log.txt, escreva:

"file1.jpg 490kB copiado de H: \ main_folder \ pasta \ subpasta \ sub_sub_folder \ sub_sub_sub_folderA para Z: \ pasta_principal \ pasta \ subpasta \ sub_sub_pasta \ sub_sub_sub_pasta_com êxito ..."

e

"file15.jpg 470kB copiado de H: \ main_folder \ pasta \ subpasta \ sub_sub_folder \ sub_sub_sub_folderA para Z: \ pasta_principal \ pasta \ subpasta \ sub_sub_pasta \ sub_sub_sub_pasta com êxito"

e.t.c.

marca o final do log (uma linha de ====== ou algo assim) e somente então prossiga para a próxima operação (conteúdo de cópia e estrutura de pastas de sub_sub_sub_folderB). Se a operação de cópia não terminar com sucesso, pare, crie um novo log error_sub_sub_sub_folderB.txt (o próximo log será error_sub_sub_sub_folderZ.txt) e somente após o log ser criado, mover para a próxima sub_sub_sub_folder

Em poucas palavras: um lote de cópia de log passo a passo que não mata o sistema ou os recursos de hardware da máquina.

    
por Lucs 22.01.2015 / 05:40

1 resposta

0

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.

    
por 22.01.2015 / 12:40