Como posso recursivamente excluir pastas vazias? [duplicado]

3

Como posso recursivamente excluir pastas vazias?

"Empty" é considerado verdadeiro se o diretório não tiver diretório e não houver arquivos, exceto arquivos gerados automaticamente ( Thumbs.db , .DS_Store , etc.)

    
por slhck 07.08.2010 / 01:41

6 respostas

5

Aqui está um one-liner de linha de comando que excluirá todos os diretórios realmente vazios (ou seja, zero arquivos) na pasta e abaixo:

for /f "delims=" %i in ('dir /ad /s /b') do @rd "%i"

Basicamente, isso obtém uma listagem recursiva de todos os diretórios a partir do atual e, em seguida, tenta remover cada diretório. O comando rd não removerá um diretório não vazio por padrão, portanto, seus arquivos devem estar seguros.

    
por 27.11.2011 / 21:59
2

Tente este: Remover diretórios vazios - CNET Download.com

Empty directory folders are annoying, but not often a cause for great concern. Still, they build up over time, and Remove Empty Directories is a smart and fast solution. The tiny program greets you with a mostly blank pane and an icon key to understanding your results. There's a dialog box at the top to specify a particular folder or drive to search, although by default it checks your C drive.

    
por 07.08.2010 / 02:06
1

Aqui estou eu removendo um diretório vazio:

C:\>md f  
C:\>rmdir f  
C:\>  

Lá, eu criei um, depois o removi. Se existem coisas, então não está vazio.

Você pode usar rmdir /s se houver itens:

C:\>rmdir f  
The directory is not empty.  

C:\>rmdir /s f  
f, Are you sure (Y/N)? y  

C:\>

E você pode fazer tudo isso sem o prompt de comando.

Recursão é um conceito em programação. Eu não acho que você quis dizer isso. E se algo é implementado usando recursão ou não, é irrelevante para você, já que sem dúvida você não pretende se limitar ... e você não era apenas curioso intelectualmente sobre implementações.

E se você estiver com problemas para excluir um diretório, pense, por exemplo, em qual erro ocorrer ao tentar excluir o diretório que está tentando eliminar. Você sempre pode inicializar um CD ao vivo e excluí-lo.

    
por 27.12.2010 / 08:47
0

Belvedere pode fazer isso, mas você precisa ser mais específico do que "inútil" para poder configurar o direito regras.

    
por 07.08.2010 / 02:03
0

Use o Prompt de Comando de Iniciar / Executar (ou a combinação do Windows R ). Escreva cmd para iniciar o console e navegue até a unidade na qual os diretórios estão, inserindo a letra da unidade (por exemplo, se estiverem em D:\ você colocou d: ).

O caminho da linha de comando será alterado para o caminho desejado. Em seguida, use o comando cd para ir para a pasta pai dos diretórios vazios ( cd D:\ParentDirectory\ ). Você pode usar a Tab para o Windows para colocar o caminho inteiro.

Quando chegar ao diretório pai, use

del /F EmptyDirectory1

Este método é o melhor e também excluirá pastas ou arquivos que não podem ser excluídos pelo Windows Explorer.

    
por 27.12.2010 / 07:44
0

for /f "delims=" %i in ('dir /ad /s /b') do @rd "%i"

- bobbymcr

A resposta do @bobbymcr funciona, no entanto, seria necessário executar (n-1) vezes a profundidade máxima do diretório para ter certeza de que não há diretórios vazios. Isso ocorre porque for irá alimentar rd diretórios na ordem decrescente dir lista-os, tentando remover o diretório pai antes de ter liberado o dos seus filhos.

Como rd removerá somente os diretórios que já estão vazios sort os filhos primeiro e os ninhos vazios serão removidos de uma árvore em uma única passagem.

Crie um arquivo [meow].bat e execute-o no diretório que você deseja remover. O primeiro parametro é um nome tempfile alternativo para usar se necessário.

:: Asserts the default tempfile name if none is specified.
IF "%1"=="" (
set __tempfile=meow.tmp
) ELSE (
set __tempfile=%1
)
echo %__tempfile%

:: Checks to see that it won't destroy an existing file
IF NOT EXIST %__tempfile% (
:: Gets list of directories in descending depth.
dir /ad /b /s > %__tempfile%
:: Removes empty directories specified in the list sorted in reverse order
for /f "delims=" %%i in ('sort /R %__tempfile%') do @rd "%%i"
:: Deletes tempfile
del %__tempfile%
) ELSE (
:: if the tempfile already exists.
@ECHO Tempfile already exists, please delete %__tempfile% and try again.
)
    
por 26.02.2013 / 19:26