Não há motivos para usar ferramentas especiais ou mesmo scripts. Basta usar a função de pesquisa no Explorer.
- Abra a pasta que você deseja nivelar no Explorer.
- Crie uma nova pasta, selecione todos os arquivos (mas não as pastas) e arraste-os para essa pasta (isso evitará a obtenção de duas cópias desses arquivos).
- Na caixa de pesquisa (a da direita da barra de endereço), digite
*
e pressione Enter. - Após a lista ser preenchida, clique com o botão direito do mouse e selecione todos, clique com o botão direito e corte.
- Prima o botão de voltar para voltar à pasta original e, em seguida, clique com o botão direito e cole.
- Se você tiver nomes duplicados, será perguntado sobre como lidar com isso. Escolha a opção mais apropriada para o seu caso de uso. (Eu suponho que seria para copiar os dois arquivos.) Para evitar ser solicitado novamente, certifique-se de aplicar isso a todos os arquivos com a caixa de seleção na parte inferior.
- Selecione todas as pastas, verifique se estão vazias, olhando para o pop-up sobre o número de arquivos selecionados e exclua-os.
Se você preferir ter um script para iniciá-lo e esquecê-lo, isso também pode ser feito. O comando para substituir mv *\* .
é muito fácil ( for /r %f in (*.*) do @move "%~f" .
), mas tenho certeza que você gostaria de lidar com duplicatas, sem deixá-las para trás, como na resposta de @Nicole Hamilton. Acrescentar um número ao nome de arquivo das duplicatas é provavelmente a maneira mais fácil de fazê-lo.
Copie e cole o seguinte arquivo em lotes no Bloco de Notas e salve-o como "flatten.cmd" (incluindo as aspas):
@echo off
cd "%~1"
md tempryfolder
move *.* tempryfolder
for /r %%f in ("*.*") do call :START "%%~f"
for /r /d %%f in (*.*) do rd "%%~f"
GOTO :EOF
:START
setlocal
If exist "%~n1%~x1" set /a num=2
:LOOP
If exist "%~n1%num%%~x1" (
set /a num+=1
goto loop
)
move "%~1" "%~n1%num%%~x1"
Para usar o script, basta arrastar a pasta que você deseja nivelar sobre ele.