Como faço para excluir as árvores de diretório via arquivo em lotes no Windows 7?


36

Quero excluir todo o conteúdo de uma pasta especificada no Windows 7 por meio de arquivo em lote. Meu problema é que 'del' ou 'apagar' exclui apenas os arquivos, não as pastas e 'rmdir' ou 'rd' sempre exclui a pasta especificada com seu conteúdo, mas eu quero excluir apenas 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.

Respostas:


36

Seu arquivo em lotes 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 lotes deve se parecer com isso:

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 procurará recursivamente na árvore de diretórios, excluindo arquivos (mesmo arquivos somente leitura) sem solicitar confirmação.

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

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


Se eu fizer uma pequena correção aqui "para / f %% f" -> "para / f% f", funcionará bem :) Muito obrigado.
Michael K

6
delnão é necessário. rd/s/qexcluirá os arquivos e subpastas.
grawity

1
@rawraw o delexiste principalmente para arquivos na pasta raiz, mas pode remover a opção de recursão.
Windos

5
@MichaelK, %% f é para uso em arquivos em lote,% f para quando é um único comando direto para a linha de comando.
Windos

1
Se qualquer um dos nomes de subdiretórios contiver espaços, você poderá adicionar "delims =" para processá-los corretamente (para / f "delims =" %% f em ...): consulte stackoverflow.com/q/5553040/64918
goldPseudo

27
rmdir /s/q C:\Share

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

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

for /d %f in (C:\Share*) do rmdir /s/q "%f"

3
Não quero excluir a pasta de compartilhamento.
Michael K


2

Sobre o quê ?

rmdir /S /Q "target"
mkdir "target

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


Isso excluiria a pasta original.
Michael K

@MichaelK Minha tarefa foi capaz de tolerar uma ausência momentânea de pasta, então fui com esta solução. Eu pensei que é mais simples e mais legível do que for /fem casos semelhantes aos meus. Só queria compartilhar
Vasilly.Prokopyev

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 contêm espaços.

Para fazer isso funcionar, eu precisava citar a sequência final, como esta

para / f "delims =" %% f em ('dir / ad / bc: \ share \') faça rd / s / q "c: \ share \ %% f"

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


0

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

para / D corresponde a diretórios e rd / s / q exclui cada um de cada vez


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.