Excluir todos os arquivos de uma pasta e suas subpastas


52

Eu quero remover todos os arquivos de uma estrutura de pastas, então fico com uma estrutura de pastas vazia.

Isso pode ser alcançado em scripts em lote ou VBScript ?

Eu tentei um comando em lote muito básico, mas isso exigia que o usuário permitisse a exclusão de cada arquivo. Esta não foi uma solução adequada, pois existem muitas centenas de arquivos e isso aumentará enormemente ao longo do tempo.

O que você pode sugerir?


Você quer dizer uma exclusão recursiva? Isso pode realmente ser feito. Algo como rd /s /q "c:\folder airá realizar uma exclusão recursiva em todos os arquivos e pastas dentroFolder A
Ramhound

Eu poderia fazer, eu não sei como script no PowerShell, mas já executei scripts do PowerShell anteriores.
BobJim

2
Agora é o momento perfeito para aprender, eu pesquisaria a sintaxe de lote e vbs para fins legados, mas investiria mais tempo na aprendizagem do PS.
precisa saber é o seguinte

Ainda não tive a chance de verificar o código, embora tenha certeza de que funcionará. Voltarei e selecionarei a resposta mais apropriada para minha consulta inicial.
precisa saber é o seguinte

Em segundo lugar, recomendo a @ BigHomie - aprendi um pouco do PowerShell e devo dizer que é bem legal - não muito difícil, uma boa arma no arsenal de qualquer programador. Eu o uso com bastante frequência agora.
19414 Ben

Respostas:


75

Isso pode ser feito usando o PowerShell :

Get-ChildItem -Path C:\Temp -Include *.* -File -Recurse | foreach { $_.Delete()}

Este comando coloca cada item filho $path, executa o método delete em cada um e é bastante rápido. A estrutura da pasta é deixada intacta.

Se você tiver arquivos sem extensão, use

Get-ChildItem -Path C:\Temp -Include * -File -Recurse | foreach { $_.Delete()}

em vez de.

Parece que o -Fileparâmetro pode ter sido adicionado após o PowerShell v2. Se for esse o caso, então

Get-ChildItem -Path C:\Temp -Include *.* -Recurse | foreach { $_.Delete()}

Deveria fazer o truque para arquivos que têm uma extensão.

Se não funcionar, verifique se você possui uma versão atualizada do Powershell


1
É -Include *.*não -Include ., grande diferença! :-)
MDMoore313

Get-ChildItem -Path D: \ EmptyThisFolder -Include . -Arquivo -Recurso | foreach {$ _. Delete ()}
BobJim 25/04

Por que você está usando -Include .?? Esse é o problema.
precisa saber é o seguinte

2
Eles não podem implementar powershell --version? Eles não podem usar um número de versão com dígitos positivos? É uma loucura. Mais de 1300 upvotes para uma pergunta sobre como descobrir o número da versão de um programa?
Thomas Weller

1
@demonicdaron não deveria; A questão do OP era preservar a estrutura de pastas.
MDMoore313

25

PowerShell curto e em conjunto. Não tenho certeza com qual versão mais baixa do PS ele irá funcionar.

Remove-Item c:\Tmp\* -Recurse -Force

2
Legal e fácil. Isso fez o truque, enquanto a resposta aceita não!
demonicdaron

Essa deve ser a resposta aceita, você pode até digitar, rm *já que não é realmente aconselhável forçar (a caixa de diálogo de confirmação tem uma opção "Sim para todos").
J Garcia

22

Você pode fazer isso com o delcomando:

dir C:\folder
del /S *

A /Sopção é excluir apenas arquivos recursivamente.


2
Isso excluirá apenas os arquivos, mas deixará as pastas?
BobJim

5
Sim. Você pode adicionar a /Popção para solicitar que você confirme cada exclusão apenas para verificar isso.
Phoops

obrigado mal tentar! espero que economize muito tempo!
BobJim

3
Sim. E para excluir arquivos ocultos e do sistema, faça attrib -s -r -h Folder\*.* /s /dantes de excluir. E para permissões, use o takeowncomando
Jet

2
E você pode usar / Q para NÃO pedir confirmação ao usar caracteres curinga.
Aylatan 25/09/2015

4

Lendo as entrelinhas da sua pergunta original, posso oferecer uma linha de código BATCH alternativa que você pode usar. O que isso fará quando executado é excluir apenas arquivos com mais de 60 dias. Dessa forma, você pode colocar isso em uma tarefa agendada e, quando executada, exclui os arquivos em excesso que você não precisa, em vez de afastar o diretório inteiro. Você pode alterar de 60 a 5 dias ou até 1 dia, se quiser. Isso não exclui pastas.

forfiles -p "c:\path\to\files" -d -60 -c "cmd /c del /f /q @path"

Obrigado pela idéia, mas atualmente acho que o processo de "esvaziamento" será concluído em um período adhoc muito não programado. Vou manter esse código para o futuro! Cheers
BobJim

O título diz "Excluir todos os arquivos de uma pasta e de suas subpastas", portanto, essa não é uma solução.
Anders Lindén


3

Use o PowerShell para excluir um único arquivo ou pasta. Antes de executar o comando Excluir no PowerShell, precisamos garantir que você esteja conectado ao servidor ou PC com uma conta que tenha acesso total aos objetos que você deseja excluir.

Com exemplo: http://dotnet-helpers.com/powershell-demo/how-to-delete-a-folder-or-file-using-powershell/

Usando os comunicados do PowerShell para excluir um arquivo

Remove-Item -Path "C: \ dotnet-helpers \ DummyfiletoDelete.txt"

O comando acima executará e excluirá o arquivo “DummyfiletoDelete.txt”, que aparece dentro do local “C: \ dotnet-helpers”.

Usando os comunicados do PowerShell para excluir todos os arquivos

Remove-Item -Path "C: \ dotnet-helpers *. *"

Usando os comunicados do PowerShell para excluir todos os arquivos e pastas

Remove-Item -Path "C: \ dotnet-helpers *. *" -Recurse

-recursedetalha e encontra muitos outros arquivos. O –recurseparâmetro permitirá que o PowerShell remova qualquer item filho sem pedir permissão. Além disso, o parâmetro –force pode ser adicionado para excluir arquivos ocultos ou somente leitura.

Usando o comando -Force para excluir arquivos com força

Usando o comando PowerShell para excluir todos os arquivos com força

Remove-Item -Path "C: \ dotnet-helpers *. *" -Force


1

Tente isso usando o PowerShell. Neste exemplo, quero excluir todos os arquivos .class:

Get-ChildItem '.\FOLDERNAME' -include *.class -recurse | foreach ($_) {remove-item $_.FullName}

1
  1. No Windows Explorer, selecione o diretório raiz que contém todos os arquivos e pastas.

  2. Procurar por *

  3. Classificar por tipo (todas as pastas estarão na parte superior e todos os arquivos listados abaixo)

  4. Selecione todos os arquivos e pressione Excluir.

Isso excluirá todos os arquivos e preservará a estrutura de diretórios.


1

Exclua todos os arquivos do diretório e subdiretórios atuais, deixando a estrutura de pastas.

( /Q) é para perguntar ao usuário se ele pode excluir

Cuidado : tente sem o /Qpara garantir que você não esteja excluindo nada precioso.

del /S * /Q 

1

Esta é a maneira mais fácil da IMO

Abra o PowerShell, navegue até o diretório ( cd), THEN

ls -Recurse * | rm

(Poof) tudo se foi ...

Se você deseja excluir com base em uma extensão específica

ls -Recurse *.docx | rm

ls está listando o diretório

-Recurse é uma bandeira dizendo ao PowerShell para entrar em qualquer subdiretório

* diz tudo

*.doc tudo com extensão .doc

| alimente a saída da esquerda para a direita

rm excluir

Todas as outras respostas parecem tornar isso mais confuso do que o necessário.


0
dir C:\testx\ -Recurse -File | rd -WhatIf
What if: Performing the operation "Remove File" on target "C:\testx\x.txt".
What if: Performing the operation "Remove File" on target "C:\testx\bla\x.txt".

-1

Como complemento para as respostas acima, na verdade não há necessidade de usar o Get-Childitem e passar o resultado para o pipeline nas respostas acima, porque a palavra-chave -Include está incluída no comando Remove-Item

Pode-se simplesmente:

Remove-Item -Include " . " "C: \ Temp" -Recurse

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.