Como excluo árvores de diretórios por meio de arquivo em lote no Windows 7?

32

Eu quero excluir todo o conteúdo de uma pasta especificada no Windows 7 por meio de um arquivo em lote. Meu problema é que 'del' ou 'apagar' apenas exclui os arquivos, não as pastas e 'rmdir' ou 'rd' sempre exclui a pasta especificada com seu conteúdo, mas eu só quero excluir o conteúdo, não a própria pasta . Eu tentei o comando ' rmdir /S /Q "C:\Share\*" ', que me deu um erro de sintaxe.

Qual é a maneira correta de fazer isso?

Estou trabalhando no Windows 7 Professional de 64 bits e tenho permissões de administrador.

    
por Michael K 26.08.2011 / 13:15

6 respostas

34

Seu arquivo de lote precisará executar dois comandos, um para limpar os arquivos e outro para remover os diretórios filhos. Eu assumi que o diretório que você deseja remover é C:\Share\

O arquivo em lote deve ser parecido com isto:

del /s /f /q c:\share\*.*
for /f %%f in ('dir /ad /b c:\share\') do rd /s /q c:\share\%%f

del /s /f /q pesquisará recursivamente pela árvore de diretórios excluindo todos os arquivos (mesmo que somente arquivos de leitura) sem solicitar confirmação.

A segunda linha percorre todos os subdiretórios (que agora devem estar vazios) e os remove.

Faltando apagar a pasta inteira e recriá-la (o que não acho que você queira fazer devido a permissões?), esta deve ser a maneira mais fácil de limpar a pasta.

    
por 26.08.2011 / 14:16
25
rmdir /s/q C:\Share

Você recebe um "Erro de sintaxe" porque rmdir aceita apenas nomes completos, não curingas. (Em cmd.exe , a expansão de curinga é deixada para os programas individuais; nem todos eles fazem isso.)

Se você tiver muitos diretórios começando com Share... , use um loop for .

for /d %f in (C:\Share*) do rmdir /s/q "%f"
    
por 26.08.2011 / 14:16
11

Tente isso em um prompt de comando:

rd /s/q "C:\Share"
    
por 17.11.2012 / 06:43
2

Que tal?

rmdir /S /Q "target"
mkdir "target

EDIT: é claro que esta solução é aplicável somente quando você pode tolerar uma ausência momentânea de pasta.

    
por 07.08.2015 / 13:07
2
for /f "delims=" %%f in ('dir /ad /b c:\share\') do rd /s /q c:\share\%%f

Isso não funciona se os subdiretórios contiverem outros diretórios que contenham espaços.

Para fazer isso funcionar, precisei citar a string final, como esta

for /f "delims=" %%f in ('dir /ad /b c:\share\') do rd /s /q "c:\share\%%f"

Aparentemente, isso faz com que o comando funcione na string citada, em vez de apenas na própria string.

    
por 13.11.2015 / 01:01
0

Eu tentaria isso na pasta onde todas as subpastas deveriam ser excluídas, mas a raiz (e os arquivos na raiz) fica como estão: para / D% v em (*) do rd / s / q% v

para diretórios de correspondências / D e rd / s / q exclui cada um de cada vez

    
por 31.05.2017 / 22:58