Primeiro de tudo, se possível, Eu sugiro que você faça backup de toda a árvore de diretórios, apenas no caso de algo der errado. Então, tente digitar o comando
for /d %d in (*) do @echo move %d\%d\* %d
Isso deve mostrar algo como
move folder1\folder1\* folder1
move folder2\folder2\* folder2
move folder3\folder3\* folder3
Se isso parece uma sequência plausível de comandos, deixe de fora o echo
:
for /d %d in (*) do @move %d\%d\* %d
Isso gerará uma mensagem de erro para folder1
,
já que folder1\folder1
não existe. Ele também dará uma mensagem de erro
para qualquer pasta em que a pasta de segundo nível esteja vazia.
Se você quiser suprimir as mensagens de erro das pastas em que a pasta de segundo nível não existe, coloque o seguinte em um arquivo em lotes:
@echo off
for /d %%d in (*) do (
if exist %%d\%%d\nul (
echo move %%d\%%d\* %%d
) else (
echo %%d\%%d doesn't exist.
)
)
ou simplesmente
@echo off
for /d %%d in (*) do if exist %%d\%%d\nul echo move %%d\%%d\* %%d
(Observe que você deve usar %%
em um arquivo em lotes
onde você usa %
diretamente no prompt de comando.)
Obviamente, existe o risco de você ter arquivos com nomes idênticos
em um diretório e seu subdiretório,
por exemplo, folder2\shopping.lst
e folder2\folder2\shopping.lst
.
No meu teste rápido em uma árvore de diretórios sem importância,
ele perguntou se eu queria sobrescrever (ou seja, desmoronar)
o arquivo de destino (nível superior).
Como eu disse, sugiro que você faça backup dos seus arquivos primeiro, só por segurança.