Resposta
Supondo que você tenha um diretório de destino em mente (C: \ Target) e todos os arquivos .txt estejam no diretório C: \ Tree, o comando a seguir obteria uma lista de todos os arquivos .txt e os copiaria para o seu destino desejado:
for /F "delims=" %a in ('dir /s /b "C:\Tree\*.txt" ') do (copy "%a" "C:\Target")
Eu coloco aspas duplas em torno dos parâmetros que podem conter espaços.
Explicação
for /F
Executa um texto de análise de loop for. Por padrão, os tokens serão divididos em espaços nas variáveis% a,% b,% c, etc. Como não queremos esse comportamento, especifiquei:
"delims="
O que significa sem delimitadores. % a será a variável que contém cada linha de texto da saída do nosso comando. O comando que usei foi:
dir /s /b "C:\Tree\*.txt"
Isso executa uma listagem de diretórios de todos os arquivos que correspondem a * .txt na pasta C: \ Tree. O sinalizador / s executa recursivamente, pesquisando dentro de todos os subdiretórios / subpastas. O sinalizador / b gera a listagem em um formato "simples", que basicamente apenas lista o arquivo e o caminho. A saída se parece com:
C:\Tree\animals\hippopotamus.txt
C:\Tree\animals\lion.txt
C:\Tree\animals\dog\poodle.txt
C:\Tree\animals\dog\terrier.txt
C:\Tree\food\fruit\apple.txt
C:\Tree\food\fruit\orange.txt
C:\Tree\food\vegetables\borcolli.txt
C:\Tree\food\vegetables\carrot.txt
C:\Tree\food\vegetables\corn.txt
E claro:
copy "%a" "C:\Target"
Copia o arquivo representado pela variável% a para o diretório C: \ Target. O loop for basicamente executa os seguintes comandos:
copy "C:\Tree\animals\hippopotamus.txt" "C:\Target"
copy "C:\Tree\animals\lion.txt" "C:\Target"
copy "C:\Tree\animals\dog\poodle.txt" "C:\Target"
copy "C:\Tree\animals\dog\terrier.txt" "C:\Target"
copy "C:\Tree\food\fruit\apple.txt" "C:\Target"
copy "C:\Tree\food\fruit\orange.txt" "C:\Target"
copy "C:\Tree\food\vegetables\borcolli.txt" "C:\Target"
copy "C:\Tree\food\vegetables\carrot.txt" "C:\Target"
copy "C:\Tree\food\vegetables\corn.txt" "C:\Target"
Para obter mais ajuda sobre opções DIR ou loops FOR no Prompt de Comando do Windows (CMD), você pode digitar help dir
ou help for
. Cuidado, a página de ajuda do loop FOR é bastante longa. ;)