Você não pode fazer move * ..
para diretórios. A única maneira de move
mover um diretório é especificar o próprio nome do diretório (nenhum caractere curinga é permitido). Então você precisa de um segundo loop (dentro do primeiro) para percorrer os diretórios:
@echo off
for /d %%d in ("*") do (
for /d %%e in ("%%d\*") do (
move "%%e" .
)
)
Não há necessidade de pushd
, porque você pode movê-lo do pai para o pai.
nota: isso é usado para um arquivo em lotes, de forma que o %d
o %
seja dobrado para %%d
e %%e
. Se você executá-lo diretamente a partir do prompt, você precisará apenas de um %
.
Editar:
Se as subpastas primeiro nível (Subpasta1 e Subpasta2) também contiverem arquivos (além das pastas Stuff1 e Stuff2), você poderá adicionar outra movimentação ao exterior.
@echo off
for /d %%d in ("*") do (
for /d %%e in ("%%d\*") do (
move "%%e" .
)
move "%%d\*" .
)