Lote movendo arquivos de uma pasta para várias pastas com base na máscara de arquivo

2

Eu tenho uma pasta com mais de cem mil (100.000+) arquivos PDF gerados por um script que precisa ser movido para várias pastas com base no nome do arquivo. Os arquivos pdf são todos nomeados assim: YY-nnnnn.pdf onde YY é o ano e nnnnn é a sequência do arquivo dentro de um ano, assim:

00-00001.pdf
00-00002.pdf
00-00003.pdf

Cada ano contém cerca de 25.000 arquivos. Eu gero os arquivos há quatro anos, ainda tenho 6 anos no valor de pdfs para serem gerados.

Eu preciso mover esses arquivos para o servidor. O servidor tem a seguinte estrutura de pastas:

D:.
├───00-00000
├───00-01000
├───00-02000
├───00-03000
├───00-04000
├───00-05000
├───00-06000
├───00-07000
├───00-08000
├───00-09000
├───00-10000
├───00-11000

Cada ano pode ter até YY-25000 pastas. Os arquivos precisam ir para a sua própria pasta com base nos cinco primeiros caracteres, assim:

├───00-00000
│       00-00001.pdf
│       00-00002.pdf
│       00-00003.pdf
│       00-00004.pdf
...
│       00-00997.pdf
│       00-00998.pdf
│       00-00999.pdf
│       
├───00-01000
│       00-01000.pdf
│       00-01001.pdf
│       00-01002.pdf

Eu estava pensando em usar o utilitário RoboCopy , mas não consegui descobrir como fazer o script corretamente. Talvez um pequeno roteiro seja necessário.

    
por cha 08.07.2015 / 01:28

1 resposta

1

Encontrou uma solução baseada em esta pergunta . O arquivo de lote para mover os arquivos é este:

@echo off
    for /f "tokens=*" %%F in ('dir/b/a-d d:\temp\pdfprints\*.pdf') do call :sub1 %%F
    goto :eof

    :sub1
    set name=%1
    move d:\temp\pdfprints\%name% R:\%name:~0,5%000\%name%
    
por 08.07.2015 / 02:03

Tags