Como posso excluir todos os arquivos / subpastas em uma determinada pasta através do prompt de comando?

42

Gostaria de excluir todos os arquivos e subpastas em um arquivo em lotes no Windows 7 e manter a pasta superior. Esvaziando basicamente a pasta. Qual é a instrução da linha de comando para isso?

Tony_Henrich
fonte
3
Não é preciso escolher, mas você está procurando como fazer isso "no prompt de comando" e não no "DOS". Não existe um subsistema DOS desde o Win ME.
MDMarra
@MarkM: Bem, existe / houve, ntvdmmas à medida que os sistemas de 64 bits ganham participação de mercado, cada vez mais é irrelevante.
Joey

Respostas:

55

Você pode fazer isso usando dele o /Ssinalizador (para instruí-lo a remover todos os arquivos de todos os subdiretórios):

del /S C:\Path\to\directory\*
MDMarra
fonte
2
o seu é melhor: D + 1
Excluiu
3
Explicação: del significa Delete e S significa Recursive.
Tamara Wijsman
3
@Tony_Henrich, Saiba mais sobre os comandos do msdos aqui. computerhope.com/msdos.htm
Moab
3
e usar / Q mantém subpastas vazias, o que é indesejável.
Tony_Henrich
3
Esta é a resposta errada e não sei por que recebeu muitos votos positivos. Parece que as pessoas não entenderam a questão completamente e não leem comentários! Vou analisar as respostas e selecionar a correta.
Tony_Henrich
22

A melhor solução: por exemplo, eu quero excluir todos os arquivos e subdiretórios do diretório pai, digamos "C: \ Users \ Desktop \ New folder \". A maneira mais fácil é criar um arquivo em lotes abaixo de três comandos.

CD C: \ Usuários \ Desktop \ Nova pasta \

del * / S / Q

rmdir / S / Q "C: \ Usuários \ Desktop \ Nova pasta \"

Aqui, primeiro, ele limpa todos os arquivos em todos os subdiretórios e depois limpa todos os subdiretórios vazios. Como o diretório de trabalho atual é o diretório pai, ou seja, "\ Nova pasta", o comando rmdir não pode excluir esse diretório.

Annasaheb
fonte
11
Funciona muito bem, exceto por um aviso quando o sistema não pode excluir a pasta raiz.
Jerther
2
Não é bom. Caminhos codificados e, olhando para ele, não esvazia a pasta. Ele remove. Muito perigoso também. Exclui arquivos na pasta atual se o caminho não sair ou digitar incorretamente.
Tony_Henrich
11
Como @Tony_Henrich disse que o rmdircomando será excluídoNew folder
Nuktu
Não. Isso realmente funciona na limpeza completa da "Nova pasta" sem excluir a própria pasta. O único problema é que ele fornece um aviso menor quando o sistema operacional falha ao excluir a pasta pai. Além disso, o comando del é redundante, a menos que você tenha uma pasta grande; nesse caso, pode ser mais rápido. Você pode modificá-lo da seguinte forma (desculpe-me pela falta de quebras de linha nos comentários): defina FOLDER = "% userprofile% \ Desktop \ Nova pasta" cd% FOLDER% rmdir / S / Q% FOLDER% \> nul 2> & 1
HSuke
3
Muito perigoso. Se alguém seguir em frente e remover / renomear `C: \ Users \ Desktop \ New folder`, a primeira linha do CD falhará e seu arquivo em lotes excluirá felizmente tudo no diretório atual (padrão). Que poderia muito bem acabar sendo o seu diretório de trabalho ou C: \ Windows \ System32
Ishmaeel
9

Navegue para o diretório pai:

pushd "Parent Directory"

Exclua as subpastas:

rd /s /q . 2>nul
user340956
fonte
11
Uau, isso é tolice. :)
Tarnay Kálmán
11
Isso é essencialmente equivalente a duas respostas anteriores.
Scott
Concordamos com o acima - esta é uma cópia das respostas anteriores, substituídas por comandos sinônimos dos que estão substituindo. pushdnão adiciona nada aqui que cdainda não esteja fazendo.
Hashim
esse é o único que eu consegui usar até agora e funcionou exatamente para o que o solicitante estava perguntando; todos os outros apenas excluíram todos os arquivos. É claro rmdir /s path-to-folderque excluirá a pasta com todas as coisas nela, mas o solicitante quis saber como excluir tudo no diretório de trabalho.
#
Essa resposta funcionou melhor para mim. Com todas as outras respostas, ele não excluiu diretórios não vazios ao usar / Q e sempre solicitou confirmação quando não estava usando / Q.
marijnr
5
rmdir "c:\pathofyourdirectory" /q /s

Não se esqueça de usar as aspas e, por /q /sisso, excluirá todos os repositórios e sem aviso prévio.

Superusuário
fonte
2
A pergunta foi: "Eu gostaria de apagar todos os arquivos e subpastas em um arquivo de lote do Windows 7 e manter a pasta superior. "
Werner Henze
5

você pode usar o rmdir para excluir os arquivos e subpastas, assim:

rmdir /s/q MyFolderPath

No entanto, é significativamente mais rápido, especialmente quando você tem muitas subpastas em sua estrutura para usar del antes do rmdir, assim:

del /f/s/q MyFolderPath > nul
rmdir /s/q MyFolderPath
Einbert Alshtein
fonte
A primeira opção apresenta um erro "o diretório não está vazio". O primeiro comando na segunda opção exclui toda a pasta. Não mantém como eu queria. O segundo comando não será necessário se o primeiro comando excluir a pasta inteira.
Tony_Henrich
O rmdircomando (ambos são iguais) excluirá a pasta pai. Esta não é uma resposta para a pergunta. Por que as pessoas não lêem?
Hashim
3

Se você deseja excluir todos os arquivos em uma pasta, incluindo todas as subpastas e não contar com algumas condições de erro para manter a pasta raiz intacta (como eu vi em outra resposta), você pode ter um arquivo em lotes como este:

@echo off

REM Checking for command line parameter
if "%~1"=="" (

    echo Parameter required.
    exit /b 1

) else (

    REM Change directory and keep track of the previous one
    pushd "%~1"

    if errorlevel 1 (

        REM The directory passed from command line is not valid, stop here.
        exit /b %errorlevel%

    ) else (

        REM First we delete all files, including the ones in the subdirs, without confirmation
        del * /S /Q

        REM Then we delete all the empty subdirs that were left behind
        for /f %%D IN ('dir /b /s /a:d "%~1"') DO rmdir /S /Q "%%D"

        REM Change directory back to the previous one
        popd

        REM All good.
        exit /b 0
    )

)

E então você poderia simplesmente chamá-lo com:

empty_my_folder.bat "C:\whatever\is\my folder"
Gio
fonte
3

Você pode fazer isso de maneira rápida e fácil, colocando estas três instruções no seu arquivo bat:

mkdir empty_folder
robocopy /mir empty_folder "path_to_directory"
rmdir empty_folder
fireblood
fonte
Isso é imensamente útil, pois também remove todos os arquivos ocultos ou do sistema.
weaknespase
1

Isso funcionou melhor para mim quando havia espaços nos nomes das pastas.

@echo off
REM ---- Batch file to clean out a folder
REM Checking for command line parameter
if "%~1"=="" (

echo Parameter required.
exit /b 1

) else (
echo ***********************************************************************************
    echo *** Deleting all files, including the ones in the subdirs, without confirmation *** 
    del "%~1\*" /S /Q
echo ***********************************************************************************
    REM Deleting all the empty subdirs that were left behind
FOR /R "%~1" %%D IN (.) DO (
    if "%%D"=="%~1\."  (
    echo *** Cleaning out folder: %~1 *** 
    ) else (
    echo Removed folder "%%D"
    rmdir /S /Q "%%D"
    )
) 

    REM All good.
    exit /b 0

)
Ed Hammond
fonte
As pessoas sempre esquecem de ter espaços nos nomes.
Kevin Panko
1

Para excluir o arquivo:

del PATH_TO_FILE

Para excluir uma pasta com todos os arquivos:

rmdir /s /q PATH_TO_FOLDER

Excluir todos os arquivos de uma pasta específica (sem excluir a própria pasta) é um pouco complicado. del /s *.*não pode excluir pastas, mas remove arquivos de todas as subpastas. Portanto, são necessários dois comandos:

del /q PATH_TO_FOLDER\*.*
for /d %i in (PATH_TO_FOLDER\*.*) do @rmdir /s /q "%i"

Você pode criar um script para excluir o que quiser (pasta ou arquivo) assim mydel.bat:

@echo off
setlocal enableextensions

if "%~1"=="" (
    echo Usage: %0 path
    exit /b 1
)

:: check whether it is folder or file
set ISDIR=0
set ATTR=%~a1
set DIRATTR=%ATTR:~0,1%
if /i "%DIRATTR%"=="d" set ISDIR=1

:: Delete folder or file
if %ISDIR%==1 (rmdir /s /q "%~1") else (del "%~1")
exit /b %ERRORLEVEL%

Alguns exemplos de uso:

mydel.bat "path\to\folder with spaces"
mydel.bat path\to\file_or_folder
Maxim Suslov
fonte
0

Isto é o que funcionou para mim.

  1. Navegue dentro da pasta em que deseja excluir os arquivos.
  2. Tipo: del *
  3. Y para sim
  4. Feito
Erv
fonte