Mesclar pastas que contenham apenas uma pasta

1

Eu tenho uma estrutura de diretórios que se parece com isso:

(root) – Folder1  – Folder2  – file3
                             – file4
                             – file5
                                 ︙
       – Folder11 – Folder12 – file13
                             – file14
                             – file15
                                 ︙
            ︙

Ou seja, Folder1, Folder11, Folder21,… cada um contém apenas um único subdiretório. Esses subdiretórios (Folder2, Folder12, Folder22,…) não servem para nada. Eu gostaria de mover file3, file4, file5, ..., para Folder1 e, em seguida, exclua o vazio Folder2. E então repita em toda a árvore; por exemplo,

(root) – Folder1  – file3
                  – file4
                  – file5
                      ︙
       – Folder11 – file13
                  – file14
                  – file15
                      ︙
            ︙

Fazer isso manualmente é impraticável porque tenho centenas ou milhares de pastas como essa. Eu já sei "Remover diretório vazio", que é realmente ótimo para excluir pastas vazias, mas não é o mesmo.

Como eu iria mesclar isso facilmente em um sistema Windows 7?

    
por Gamnamno 28.06.2014 / 00:59

1 resposta

0

Você pode fazer isso com o CMD (eu removi o espaço em branco da "pasta 1" para simplificar o exemplo, removendo a necessidade de citações.): -

c:
cd \folder1
for /r %f in (*) do move /-y %f \folder1\
for /d %f in (*) do rd /s /q %f

Seria mais seguro criar uma nova pasta de destino e mover os arquivos para lá: assim que você tiver certeza de que todos os arquivos foram movidos (com dir / s ), exclua \ folder1 (com rd / s ) e renomeie (usando move ) a nova pasta de volta para \ folder1 : -

c:
md \newfolder1
cd \folder1
for /r %f in (*) do move /-y %f \newfolder1\
dir /s
rem If the previous command shows no files then proceed with:-
cd \
rd /s /q \folder1
move \newfolder1 \folder1

Observe que haverá solicitações se os nomes forem duplicados em subdiretórios diferentes (incluímos / - y no comando move , caso você coloque os comandos em um lote arquivo).

    
por 28.06.2014 / 02:45

Tags