2013-01-17 15:33:22 +0000 2013-01-17 15:33:22 +0000
59
59

Apagar completamente uma pasta no Windows usando a linha de comando

Preciso de apagar uma pasta que contenha outras pastas e ficheiros no interior. Eu tentei os comandos del e rmdir mas por vezes falham com algumas linhas de erro: [PATH]: The directory isn't empty.

Existe alguma boa alternativa?

Respostas (8)

58
58
58
2013-01-17 15:38:19 +0000

Experimente:

rmdir /S your_directory

ou:

rmdir /S /Q your_directory

para saltar mensagens de confirmação.

16
16
16
2013-07-16 16:23:26 +0000

Isto acontece-me muito com os meus scripts de construção automática.

Acho que a razão pode ser alguma aplicação que tem um ficheiro aberto nesse directório com “partilhar apagar”. Isto é, a aplicação permite a eliminação do ficheiro (e é por isso que eu imagino que a chamada DeleteFile não falha), mas o ficheiro só desaparecerá depois de a referida aplicação ter fechado o seu handle.

Isso significa que o ficheiro pode ainda lá estar quando o comando rmdir tenta eliminar a pasta, daí a mensagem de erro. Pouco depois, a referida aplicação fechará o seu handle, o ficheiro desaparecerá, e quando se inspecciona a pasta para ver que ficheiro rmdir estava a falar sobre ele estará vazio.

Pelo menos é essa a minha teoria.

A solução proposta por Harry Johnston parece boa. Só que eu inseriria uma pausa entre os comandos do rmdir. Claro que o Windows não tem um comando de “pausa” facilmente scriptable (correcção: as versões antigas do Windows não têm, as mais recentes têm - ver comentários). Mas se a granularidade dos segundos é suficiente, pode-se usar ping para criar uma pausa:

ping -n {desired_delay_in_seconds + 1} 127.0.0.1 >nul

Então no total:

rd /s /q foo
:: retry once
if exist foo (
    :: clear errorlevel
    cmd /c
    :: pause
    ping -n 2 127.0.0.1 >nul
    :: retry
    rd /s /q foo
)
:: retry yet again
if exist foo (
    cmd /c
    ping -n 2 127.0.0.1 >nul
    rd /s /q foo
)
:: give up
if exist foo {panic}
11
11
11
2013-01-17 16:27:07 +0000

Pode ter alguns ficheiros só de leitura, pode usar a opção del /F para se livrar deles usando

del /S /F your_directory
     rmdir your_directory

Também pode ter alguns ficheiros escondidos e se tem a certeza que os quer apagar, então pode fazê-lo usando

del /S /F /AH your_directory
     rmdir your_directory

Se isto ainda falhar, então ou não tem permissão para apagar alguns ficheiros, ou alguns dos ficheiros ainda estão em uso.

5
5
5
2013-01-17 22:34:36 +0000

Creio que há um bug no Windows 7 (e talvez noutras versões) que por vezes causa este sintoma; ou pode ser um bug em software de terceiros. (Por acaso tem o Symantec Endpoint Protection instalado?)

De qualquer forma, já o encontrei com bastante frequência. Na maioria dos casos, o problema pode ser resolvido correndo rd /s /q duas ou três vezes seguidas.

Se isto estiver num ficheiro batch, pode fazer algo como isto:

rd /s /q foo
if exist foo rd /s /q foo
if exist foo rd /s /q foo
if exist foo echo Help! & pause
3
3
3
2013-01-17 15:36:33 +0000

Utilize del nos ficheiros que se encontram no interior, depois rmdir para remover a pasta.

Para utilizar o método rmdir para remover também todos os ficheiros, utilize a chave /S antes do nome do directório e /Q para suprimir o pedido de eliminação. Esta é a melhor forma de o fazer, uma vez que não perde nenhum ficheiro. Tenha cuidado ao utilizar a opção /Q, pois ela não o avisará dos atributos de Sistema ou Arquivo Escondido.

2
2
2
2017-12-01 18:08:45 +0000

Se utilizar node pode utilizar a dependência rimraf assim:

run install: npm install rimraf -g

delete folder: rimraf SourceFolder

Isto ajudou-me ao obter o erro:

os nomes dos ficheiros-fonte são maiores do que os suportados pelo sistema de ficheiros

0
0
0
2015-11-16 14:47:29 +0000

Acho que se pode usar assim:

msg*your file is going to delete 
pause
del/s /q "C:\Users\Rd\Desktop\New folder (2)\" 
rmdir /s /q "C:\Users\Rd\Desktop\New folder (2)\"
mkdir "C:\Users\Rd\Desktop\New folder (2)"
0
0
0
2016-06-24 18:30:12 +0000

As versões mais antigas do Windows (DOS, Windows 95/98/ME), DELTREE são o equivalente a RM ou RMDIR. Eu uso o DELTREE na minha estação de trabalho Windows 7 em ficheiros batch.

Deletes a directory and all the subdirectories and files in it.

To delete one or more files and directories:
DELTREE [/Y] [drive:]path [[drive:]path[...]]

  /Y Suppresses prompting to confirm you want to delete
                  the subdirectory.
  [drive:]path Specifies the name of the directory you want to delete.

Note: Use DELTREE cautiously. Every file and subdirectory within the
specified directory will be deleted.