Mover arquivos da pasta pai para subpastas

2

Estou tentando corrigir o problema a seguir por meio de um arquivo em lotes.

test é uma pasta pai, que contém mais subpastas test1 , test2 , test3 . Todas essas subpastas test1 , test2 , test3 contêm alguns arquivos .docx e mais um arquivo subpasta.

  • Procure os arquivos .docx existentes nas subpastas test1 , test2 , test3 .
  • Copie-os para uma pasta desejada chamada destination .

O código a seguir funciona bem para a primeira parte do problema:

for /R "C:\test" %%f in (*.docx) do xcopy %%f "C:\Users\%USERNAME%\Desktop\destination\"  /exclude:c:\test\not_required.txt

Agora, quero mover os arquivos .docx das subpastas test1 , test2 , test3 para o respectivo arquivo de subpastas. Até agora só consegui construir o seguinte código para a segunda parte do meu problema.

for /d /r "c:\test" %%a in (*) do (
if /i "%%~nxa"=="archiv" set "folderpath=%%a"
move "C:\test\test1\test1.docx" "%folderpath%" 
)

Como você pode ver, eu dei para a fonte um movimento de arquivo estático C:\test\test1\test1.docx . Eu não sei como usar mais variáveis dentro de loops e infelizmente não está funcionando como desejado. Um conselho de alguns especialistas seria muito apreciado.

    
por Talha Rehman 02.07.2017 / 12:22

1 resposta

0

O problema com a sua abordagem é que For /R também vai mergulhar nas pastas de arquivo, então isso deve ser evitado.

Se a sua estrutura de pastas não tiver profundidade variável, você poderá usar um for / d com um caractere curinga para obter apenas subpastas diretas de C:\test

Com esta situação de amostra:

> tree /F
C:\
├───Test
│   ├───test1
│   │   │   Example_8192.docx
│   │   │   Example_32457.docx
│   │   │
│   │   └───archive
│   ├───test2
│   │   │   Example_14218.docx
│   │   │   Example_20916.docx
│   │   │
│   │   └───archive
│   └───test3
│       │   Example_12174.docx
│       │   Example_9168.docx
│       │
│       └───archive
└───Users
    └───UserName
        └───Desktop
            └───Destination

Este lote é usado para modificadores de variáveis :

:: C:\Copy+Archive.cmd
@Echo off
For /D %%D in ("C:\test\*") do (
    Echo Processing %%D
    For %%F in ("%%~fD\*.docx") do (
        Echo Copying "%%~fF" "C:\Users\%USERNAME%\Desktop\Destination\"
        xcopy "%%~fF" "C:\Users\%USERNAME%\Desktop\Destination\" >Nul && (
        Echo Moving  "%%~fF" "%%~dpFarchive\"
        Move  "%%~fF" "%%~dpFarchive\" >Nul
        )
    )
)

produzirá esse resultado

> tree /f
C:\
│   Copy+Archive.cmd
│
├───Test
│   ├───test1
│   │   └───archive
│   │           Example_8192.docx
│   │           Example_32457.docx
│   │
│   ├───test2
│   │   └───archive
│   │           Example_14218.docx
│   │           Example_20916.docx
│   │
│   └───test3
│       └───archive
│               Example_12174.docx
│               Example_9168.docx
│
└───Users
    └───UserName
        └───Desktop
            └───Destination
                    Example_8192.docx
                    Example_32457.docx
                    Example_14218.docx
                    Example_20916.docx
                    Example_12174.docx
                    Example_9168.docx
    
por 02.07.2017 / 21:42

Tags