Como movo todos os arquivos de uma árvore para a raiz da árvore?

10

Eu tenho uma pasta (vamos chamá-la de A) com muitas subpastas B, C, D, E, que novamente têm as subpastas B1, B2, B3, ... C1, C2, C3 ...

Como posso usar o cmd para mover todos os arquivos de todas as subpastas para a pasta "raiz" A?

Torre
fonte
Estou supondo que você deseja que todos os arquivos em uma raiz, não em subpastas? Então A \ Arquivo1, A \ Arquivo2, não A \ Pasta2 \ Arquivo1?
Canadian Luke
@ Luke - Sim, você entendeu. Todo arquivo existente em pastas e subpastas é movido para a raiz.
Rook

Respostas:

12

Minha postagem original foi negligenciada para incluir a extensão do arquivo no comando mover. %~niretorna apenas o nome da base, você precisa usar %~nxipara obter o nome do arquivo e a extensão! Espero que você não tenha mutilado seus nomes de arquivos na minha conta!

Em um prompt de comando:

cd /d C:\Path\To\A
for /r %i in (*) do @move "%i" "%~nxi"

Se você precisar limpar as pastas vazias posteriormente:

for /d %i in (*) do @rd /s /q "%i"

Agora, se você tiver algum conflito de nome de arquivo, estará por sua conta. Você pode adicionar o /yparâmetro ao movecomando (antes de "%i") para forçar substituições. Se você quiser algo diferente, precisará de outro programa que possa renomear tudo automaticamente.

Além disso, se você quiser usar isso em um arquivo em lotes, altere todos os %para %%.

afrazier
fonte
Não sabia FOR /r- legal!
Daniel Beck
Uau, muito incrível. Eu me curvo ao seu comando-fu.
Mokubai
2

Crie uma pasta e copie todas as outras pastas nela, clique com o botão direito do mouse nessa pasta e selecione Pesquisar . Na caixa de pesquisa, insira *.*.

Isso listará todos os arquivos e pastas. Selecione todos os arquivos que você deseja no diretório raiz e corte-os. Navegue para o diretório raiz e cole todos os arquivos lá.

Richard
fonte
A pesquisa não existe como um comando no meu cmd.
Rook
Richard não estava falando de um comando. Editou sua resposta para torná-la mais clara.
Isaac Rabinovitch
0

Instale o Cygwin (ou outro ambiente Unix para Windows) e execute o seguinte:

cd A
find . -type f -exec mv {} . \;
Daniel Beck
fonte
Dependendo do seu mve das findvariantes, pode ser necessário usá-lo find . -type f -exec mv -t . {} \;.
Daniel Beck
1
Para portas nativas do Windows de muitas ferramentas Unix, eu gosto de unxutils.sourceforge.net
Dennis
@Dennis UnxUtils são legais, infelizmente já velhos. Se você os estiver usando no momento, poderá verificar se minha postagem funciona com eles? mkdir -p a/a1 a/a2 a/a3 b/b1 b/b2 b/b3 ce touch a/a1/foo a/a1/bar a/a2/baz a/a3/qux b/b1/quux b/b2/quuux b/b3/quuuux c/cccpara preparação.
Daniel Beck
-1 Isso pode ser verdade, mas eu estava perguntando sobre como fazer isso no cmd.
Rook
@ Daniel Sem dúvida eles são velhos, eu tenho arrastado eles por anos. Eu apenas tentei find . -type f -exec mv {} . ;E parecia funcionar bem.
Dennis