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?
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?
Respostas:
Minha postagem original foi negligenciada para incluir a extensão do arquivo no comando mover.
%~ni
retorna apenas o nome da base, você precisa usar%~nxi
para 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 /y
parâmetro ao move
comando (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 %%
.
FOR /r
- legal!
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á.
Instale o Cygwin (ou outro ambiente Unix para Windows) e execute o seguinte:
cd A
find . -type f -exec mv {} . \;
mv
e das find
variantes, pode ser necessário usá-lo find . -type f -exec mv -t . {} \;
.
mkdir -p a/a1 a/a2 a/a3 b/b1 b/b2 b/b3 c
e touch a/a1/foo a/a1/bar a/a2/baz a/a3/qux b/b1/quux b/b2/quuux b/b3/quuuux c/ccc
para preparação.
find . -type f -exec mv {} . ;
E parecia funcionar bem.