Eu tenho um monte de pastas dentro de pastas. Como isso
Root Folder
-- Folder 1
-- Folder 2
-- Folder 3
-- Folder 4
Eu quero recolher todas as pastas para que todos os arquivos na pasta1, pasta 2, pasta 3, ... pasta n existe na pasta raiz.
Qual é a maneira mais rápida de fazer isso no Windows?
Respostas:
Não há motivos para usar ferramentas especiais ou mesmo scripts. Basta usar a função de pesquisa no Explorer.
*
e pressione Enter.Se você preferir ter um script para iniciá-lo e esquecê-lo, isso também pode ser feito. O comando para substituir
mv *\* .
é bem 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 do @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):
Para usar o script, basta arrastar a pasta que você deseja nivelar sobre ela.
fonte
Você pode achatar no Windows Explorer, navegando até a pasta que deseja nivelar e procurando para
System.Kind:<>folder
excluir pastas dos resultados.Você pode selecionar todos os arquivos com CTRL + A e copiá-los e colá-los em uma nova pasta. Observe que o Windows Explorer perguntará a você como lidar com nomes de arquivos duplicados.
fonte
System.Kind:<>cartella
)Esse tipo de coisa é fácil com um shell Unix. Aqui está o que você poderia fazer com meu próprio shell Hamilton C (incluindo a versão gratuita ). Você poderia fazer algo muito semelhante com o Cygwin bash.
Se o seu diretório é realmente grande, é possível que o curinga tenha ocorrido em uma linha de comando muito longa para o Windows passar para um processo filho. (A chamada do Windows CreateProcess limita a lista de argumentos a 32K caracteres Unicode.) Mas o shell C não tem limite internamente, portanto, você poderia iterar pela lista inteira dessa maneira:
Para o ponto de @ MarkAllen acima, este tipo de pressupõe que não há nomes duplicados. Se houver, as cópias posteriores na lista substituirão as mais antigas. Se isso é uma preocupação, você pode iterar sobre os arquivos,
mv
usando-os somente se não estiver sobrescrevendo. O:t
operador é o operador de cauda . O-e
operador é o arquivo existe teste .Isso ainda deixa os diretórios vazios, o que talvez você não queira depois que eles forem esvaziados. Essa poderia ser a próxima iteração se isso importasse.
fonte
bash
,mv */* .
funciona para mim.