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