Ok, finalmente descobri adaptando o código de outra pergunta. Obrigado ao @AFH por esclarecer as partes que eu não tinha certeza sobre os comentários para esta resposta, e por sua ajuda geral com isso - é muito apreciado.
Para extrair todos os arquivos das subpastas para a pasta pai
for /r "PARENTFOLDER" %d in (*.*) do move "%d" "PARENTFOLDER"
Lembre-se de substituir todas as instâncias de PARENTFOLDER
pelo caminho da pasta para a qual você deseja extrair os arquivos.
Para extrair todos os arquivos das subpastas e Excluir subpastas vazias
É improvável que você precise manter as subpastas vazias sobrando depois de extrair os arquivos delas - eu certamente não o fiz - então o comando abaixo também automatiza a exclusão delas.
for /r "PARENTFOLDER" %d in (*.*) do move "%d" "PARENTFOLDER" && cd "PARENTFOLDER" && for /f "delims=" %d in ('dir /s /b /ad ^| sort /r') do rd "%d"
Mais uma vez, substitua todas as instâncias de PARENTFOLDER
pelo caminho da pasta para a qual você deseja extrair os arquivos.
Por este ponto, no entanto, não é mais um one-liner, e começa a ficar um pouco confuso quando colado na linha de comando, então é mais fácil colocar a coisa toda em um arquivo de lote. A utilização de variáveis para o caminho para a pasta pai permite substituir apenas a instância de PARENTFOLDER
no início do arquivo e também é a opção mais segura, evitando qualquer exclusão acidental de pastas vazias que você queira manter.
O arquivo de lote
Cole em um arquivo de texto, substitua PARENTFOLDER
pelo caminho da pasta com a qual deseja trabalhar e salve-o com a extensão .bat
. Executar em qualquer diretório.
@ECHO OFF
SETLOCAL
SET parent="PARENTFOLDER"
CD /d %parent%
FOR /r %parent% %%d IN (*.*) DO MOVE "%%d" %parent%
FOR /f "delims=" %%d IN ('DIR /a:d /s /b ^| SORT /r') DO RD "%%d"
ECHO Done. Press any key to terminate script.
PAUSE >NUL