Arquivo em lote. Exclua todos os arquivos e pastas em um diretório

135

Quero ter um arquivo em lotes que exclua todas as pastas e arquivos da minha pasta de cache do meu kit de ferramentas sem fio.

Atualmente, tenho o seguinte:

cd "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS"
del *.db

Isso excluirá todos os arquivos .db no diretório RMS , no entanto, desejo excluir todas as coisas desse diretório. Como posso fazer isso?

user69514
fonte
3
Digite del /?no prompt. Ele fornecerá informações sobre como usar a ferramenta. Nesse caso, del *.* /sfuncionaria, mas não no diretório errado!
22611 Michael Todd
35
rmdir /s /q c:\users\tbrollo\j2mewtk\2.5.2\appdb\RMS
Forsvarir
Eu sugeriria por votos a favor para alterar a resposta correta #
213 GregM Greg
5
A resposta da forsvarir também remove o RMSdiretório, que pode não ser o que foi planejado. (Na verdade, é muitas vezes o que eu não quero, porque perco o registro de data e hora original do diretório e as permissões que ele possui.) Veja minha resposta para saber como remover todo o conteúdo de um diretório, mas deixar o próprio diretório em Lugar, colocar.
Bill_Stewart

Respostas:

51

del *.*em vez de del *.db. Isso removerá tudo.

Jon Martin
fonte
56
Nota: Se você quiser ignorar "Tem certeza de que deseja excluir ..." necessidade você vai prompt para adicionar bandeiras / FQ:del . /F /Q
Rhyuk
41
isso remove apenas arquivos - não pastas
icc97 15/14
52
Isso não deve ser marcado como a resposta correta, porque não exclui pastas (conforme indicado na pergunta).
Bill_Stewart
158

Usar:

  • Crie um arquivo em lote

  • Copie o texto abaixo no arquivo em lotes

    set folder="C:\test"
    cd /d %folder%
    for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
    

Ele excluirá todos os arquivos e pastas.

GregM
fonte
4
Incrível, eu estava procurando algo para limpar arquivos e pastas para um trabalho em lotes mensal e isso fez o truque.
Dave Harding
9
Verifique se o diretório existe antes de fazer isso.
Bill_Stewart
2
Se você tiver caracteres 'especiais' em seus nomes de arquivo, primeiro faça chcp 10000a alteração da codificação para UTF-16
Demelziraptor
3
Só quero adicionar uma observação ao comentário de Bill_Stewart. O motivo pelo qual você deseja ter certeza de que o diretório existe é que, caso contrário, ele limpará o diretório em que você está atualmente. No meu caso, era o arquivo em lotes em que eu trabalhava há mais de 30 minutos. :( Boa coisa o resto da pasta estava sob controle de origem.
helios456
2
@vee alterar o loop para (rmdir "%%i" /s/q 2>NUL || del "%%i" /s/q >NUL ) suprimir as mensagens de erro e de exclusão
Carl Walsh
34
IF EXIST "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" (
    rmdir "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" /s /q
)

Isso excluirá tudo da pasta (e da própria pasta).

infojolt
fonte
13
Penso que a questão é esvaziar o diretório de todo o conteúdo, mas não excluir o próprio diretório.
Bill_Stewart
16

del *.*excluirá apenas arquivos, mas não subdiretórios. Para nuke o conteúdo de um diretório, você pode usar este script:

@echo off
setlocal enableextensions
if {%1}=={} goto :HELP
if {%1}=={/?} goto :HELP
goto :START

:HELP
echo Usage: %~n0 directory-name
echo.
echo Empties the contents of the specified directory,
echo WITHOUT CONFIRMATION. USE EXTREME CAUTION!
goto :DONE

:START
pushd %1 || goto :DONE
rd /q /s . 2> NUL
popd

:DONE
endlocal

As pushdalterações no diretório do qual você deseja excluir os filhos. Então, quando rdpede para excluir o diretório atual e todos os subdiretórios, a exclusão dos subdiretórios é bem-sucedida, mas a exclusão do diretório atual falha - porque estamos nele. Isso produz um erro que é 2> NULengolido. (2 sendo o fluxo de erro).

Bill_Stewart
fonte
6
Fiquei intrigado sobre exatamente como isso funcionou um pouco, como uma explicação para outras pessoas: o pushd muda para o diretório do qual você deseja excluir os filhos. Então, quando rd pede para excluir o diretório atual e todos os subdiretórios, a exclusão dos subdiretórios é bem-sucedida, mas a exclusão do diretório atual falha - porque estamos nele. Isso produz um erro que 2> NUL engole. (2 sendo o fluxo de erro). Muito esperto, Sr. Stewart!
Kinetic
Ah, e "setlocal enableextensions" ativa a capacidade de enviar simultaneamente o diretório atual para a pilha e alterar o diretório. Isso só parece ser necessário antes do XP, pois lá e mais tarde o padrão é On de qualquer maneira.
Kinetic
Você pode integrar as informações dos comentários na resposta (os comentários podem desaparecer a qualquer momento)? ( Sem usar "Edit:" "Update:" rótulos .)
Peter Mortensen
12

Acabei de colocar isso junto com o que morty346 postou:

set folder="C:\test"
IF EXIST "%folder%" (
    cd /d %folder%
    for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
)

Ele adiciona uma verificação rápida de que a pasta definida na variável existe primeiro, altera o diretório para a pasta e exclui o conteúdo.

Fantus_Longhorn
fonte
2
Portanto, dica rápida - se você tentar executá-lo em um caminho de rede, mesmo com a instrução "IF EXIST", ela falhará ao definir a pasta e uma instrução será gravada no prompt do cmd "Caminhos UNC não compatíveis, com o padrão de diretório do Windows ", ele tentará excluir tudo do diretório do Windows. Por isso tem cuidado.
CBRF23
11

Você pode fazer isso usando dele o /Ssinalizador (para solicitar a recursão de todos os arquivos de todos os subdiretórios):

del /S C:\Path\to\directory\*

O comando RD também pode ser usado. Exclua recursivamente silenciosamente sem um prompt:

@RD /S /Q %VAR_PATH%

Rmdir (rd)

PodTech.io
fonte
5
set "DIR_TO_DELETE=your_path_to_the_folder"

IF EXIST %DIR_TO_DELETE% (
    FOR /D %%p IN ("%DIR_TO_DELETE%\*.*") DO rmdir "%%p" /S /Q
    del %DIR_TO_DELETE%\*.* /F /Q
)
Cristian Tetic
fonte
3

Tente o seguinte; funciona para mim.

Eu tenho um aplicativo que despeja dados na minha pasta "C: \ tmp" e o seguinte funciona melhor para mim. Nem pede Sim ou Não para excluir os dados. Fiz um cronograma para que ele seja executado a cada 5 minutos

cd "C:\tmp"

del *.* /Q
poorvesh
fonte
7
Se a pasta "C: \ tmp" não estiver presente (se você ou algum outro aplicativo tiver excluído essa pasta) e se você tentar executá-la, ela não excluirá os dados de outra pasta dentro de "C: \"? (Aconteceu comigo)
Vikram
4
Como observa Vikram: 1) Isso é muito perigoso e 2) ele não remove os subdiretórios, conforme indicado na pergunta.
Bill_Stewart
2
Além da coisa das pastas ... você pode simplesmente fazer del /q c:\tmp\*.*, o que é cerca de um milhão de vezes mais seguro. Sem mencionar cdapenas mudará o caminho, não dirigirá.
Nyerguds 01/09/16
1
Este é um conselho terrível. Como já mencionado, você pode acabar com tantos dados essenciais como resultado disso. Sinalizado para remoção, acho que é tão ruim assim.
RyanfaeScotland
2

Melhor ainda, digamos que eu queira remover tudo da C:\windows\temppasta.

@echo off
rd C:\windows\temp /s /q
user3788752
fonte
11
Isso remove o diretório c:\windows\temp. Eu não acho que era isso que a pergunta original estava fazendo.
Bill_Stewart
A remoção do diretório me parece mais fácil e, se eu precisar recriá-lo posteriormente, posso. Um problema pode ser a perda de permissões especiais de pasta. No entanto, isso parece muito mais fácil do que a maioria das outras respostas.
precisa saber é
1
Infelizmente, recriar exclusão e imediata do script em lotes parece dar aleatório "acesso negado" erros, no Win10 ...
Nyerguds
2

Você pode usar a robocopy para espelhar uma pasta vazia na pasta que está limpando.

robocopy "C:\temp\empty" "C:\temp\target" /E /MIR

Também funciona se você não conseguir remover ou recriar a pasta real.

Requer um diretório vazio existente.

Aaron
fonte
1
De acordo com a ajuda do robocopy, /MIR :: MIRror a directory tree (equivalent to /E plus /PURGE).- então eu tenho certeza que isso /Eé redundante.
Nyerguds 02/09/16
2

Usar

set dir="Your Folder Path Here"
rmdir /s %dir%
mkdir %dir%

Esta versão exclui sem perguntar:

set dir="Your Folder Here"
rmdir /s /q %dir%
mkdir %dir%

Exemplo:

set dir="C:\foo1\foo\foo\foo3"
rmdir /s /q %dir%
mkdir %dir%

Isso limpará C:\foo1\foo\foo\foo3 .

(Gostaria de mencionar a resposta de Abdullah Sabouin . Houve uma confusão sobre eu copiá-lo. Não notei o post dele. Gostaria de agradecer a você melpomene por apontar erros!)

TravieDude Minecraft e Mais
fonte
Isso não funciona. rmdir fooerros se foonão for um diretório vazio.
melpomene
@melpomene Encontrei o erro e deve ser corrigido !!
TravieDude Minecraft e mais
1
Não pretendia copiar @Abdullah Sabouni de forma alguma. Não devo ter percebido isso. Eu sinto Muito.
TravieDude Minecraft e mais
@melpomene Eu declarei meu erro e meu ponto de vista do que aconteceu. Mas eu decidi não excluir, caso isso ajude de qualquer maneira. Obrigado por apontar isso.
TravieDude Minecraft e mais
@TravieDudeMinecraftandMore +1 - funcionou para mim também.
Guy Avraham
0

Você não pode excluir tudo com um rmdirou delsozinho:

  • rmdir /s /qnão aceita parâmetros curinga. Então rmdir /s /q *, erro.
  • del /s /f /q excluirá todos os arquivos, mas os subdiretórios vazios permanecerão.

Minha solução preferida (como eu usei em muitos outros arquivos em lotes) é:

rmdir /s /q . 2>NUL
butfly
fonte
0

Apenas uma versão modificada da resposta de GregM :

set folder="C:\test"
cd /D %folder%
if NOT %errorlevel% == 0 (exit /b 1)
echo Entire content of %cd% will be deleted. Press Ctrl-C to abort
pause

REM First the directories /ad option of dir
for /F "delims=" %%i in ('dir /b /ad') do (echo rmdir "%%i" /s/q)

REM Now the files /a-d option of dir
for /F "delims=" %%i in ('dir /b /a-d') do (echo del "%%i" /q)

REM To deactivate simulation mode remove the word 'echo' before 'rmdir' and 'del'.
grenix
fonte
-1
@echo off
@color 0A

echo Deleting logs

rmdir /S/Q c:\log\

ping 1.1.1.1 -n 5 -w 1000 > nul

echo Adding log folder back

md c:\log\

Você estava no caminho certo. Basta adicionar código para adicionar a pasta que é excluída novamente.

Abdullah Sabouni
fonte
1
Eu não recomendo esta solução porque remove o diretório (perdendo suas permissões) e o recria (possivelmente com permissões diferentes).
Bill_Stewart
-3

Você deve executar este comando para excluir todos os arquivos:

del*.*
David Naranjo Hernandez
fonte
6
mesmo que a resposta aceita de 26 / jul / 11 às 21:04. Por favor, não adicione uma resposta quando você não tiver algo novo.
Stephan
2
Além da crítica válida de @Stephan, o comando precisa ser del *.*(com um espaço)
Ty Hitzeman