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

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

Tenho mais de 1 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 de 10 a 15 arquivos, sub_sub_folder pode ser um carimbo de data/hora, sub_folder é um nome de máquina e a pasta é outro número incrementado.

Preciso ter uma cópia de main_folder com a mesma estrutura, mas preciso verificar se minha cópia é 100% igual à fonte. O Windows Explorer será bloqueado após aproximadamente 1000 cópias, nem mostra as propriedades (tamanho, tamanho no disco, contém).

Eu preciso de um lote que irá H:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderAler e copiar todos os 14 atributos dos arquivos e colá-los Z:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderA, abrir um arquivo log.txt, escrever:

"arquivo1.jpg 490kB copiado de H:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderA para Z:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderA com sucesso ..."

e

"arquivo15.jpg 470kB copiado de H:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderA para Z:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderA com sucesso"

etc.

marque o final do log (uma linha de ====== ou algo assim) e só então prossiga para a próxima operação (copiar conteúdo e estrutura de pastas de sub_sub_sub_folderB). Se a operação de cópia não for encerrada 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, mova para a próxima sub_sub_sub_folder

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

Responder1

Tanto o xcopy quanto 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 produzirá os caminhos completos de origem e destino.

/V afirma verificar os tamanhos dos arquivos, mas não os imprime na saída.

Além de não ter os tamanhos dos arquivos registrados, isso atinge principalmente o que você descreveu. Existem outras opções que podem controlar se ACLs e 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á abortar uma subpasta e continuar com a próxima subpasta em caso de erro (/C continua todos os arquivos em caso de 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)

Robocopy produz um log bastante detalhado, incluindo tamanhos de arquivo. Tentar:

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 criar o script da iteração você mesmo, 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 copiará apenas os arquivos nas sub_sub_sub_folders: quaisquer arquivos em pastas de nível superior serão ignorados, porque for /dapenas itera nos diretórios.

informação relacionada