Exclui completamente uma pasta no Windows usando a linha de comando

47

Eu preciso excluir uma pasta contendo outras pastas e arquivos dentro dela. Eu tentei os comandos del e rmdir , mas às vezes eles falham com algumas linhas de erro: [PATH]: The directory isn't empty.

Existe alguma boa alternativa?

    
por Francesco Zanini 17.01.2013 / 16:33

8 respostas

14

Isso acontece muito comigo com meus scripts de criação automatizados.

Eu acho que o motivo pode ser algum aplicativo que tenha um arquivo aberto nesse diretório com "share delete". Ou seja o aplicativo permite uma exclusão do arquivo (é por isso que eu acho que a chamada DeleteFile não falha), mas o arquivo só irá desaparecer depois que o aplicativo tiver fechado o seu identificador.

Isso significa que o arquivo ainda pode estar lá quando o comando rmdir tentar excluir a pasta, daí a mensagem de erro. Logo depois disso, o aplicativo encerrará o manipulador, o arquivo desaparecerá e quando você inspecionar a pasta para ver qual arquivo rmdir estava falando, estará vazio.

Pelo menos essa é a minha teoria.

A solução proposta por Harry Johnston parece boa. Somente eu inseriria uma pausa entre os comandos rmdir . É claro que o Windows não possui um comando "pause" facilmente programável por script (correção: versões antigas do Windows não, mais recentes possuem - ver comentários). Mas, se a granularidade dos segundos for 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}
    
por 16.07.2013 / 18:23
45

Tente:

rmdir /S your_directory

ou:

rmdir /S /Q your_directory 

para pular as mensagens de confirmação.

    
por 17.01.2013 / 16:38
11

Você pode ter alguns arquivos readonly, você pode usar a opção del / F para se livrar deles usando

     del /S /F your_directory
     rmdir your_directory

Você também pode ter alguns arquivos ocultos e, se tiver certeza de que deseja excluí-los, poderá fazer isso usando

     del /S /F /AH your_directory
     rmdir your_directory

Se isso ainda falhar, você não tem permissão para excluir alguns arquivos ou alguns dos arquivos ainda estão em uso.

    
por 17.01.2013 / 17:27
4

Eu acredito que há um bug no Windows 7 (e talvez outras versões), que às vezes causa esse sintoma; ou pode ser um bug no software de terceiros. (Você tem o Symantec Endpoint Protection instalado por acaso?)

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

Se isso estiver em um arquivo de lote, você pode fazer algo assim:

rd /s /q foo
if exist foo rd /s /q foo
if exist foo rd /s /q foo
if exist foo echo Help! & pause
    
por 17.01.2013 / 23:34
2

Use del nos arquivos internos e, em seguida, rmdir para remover a pasta.

Para usar o método rmdir para remover todos os arquivos também, use a opção /S antes do nome do diretório e /Q para suprimir a solicitação de exclusão. Esta é a melhor maneira de fazer isso, já que você não perde nenhum arquivo. Tenha cuidado ao usar a opção / Q, já que ela não irá avisá-lo sobre atributos de arquivos do Sistema ou Ocultos

    
por 17.01.2013 / 16:36
0

Pasta versões antigas do Windows (DOS, Windows 95/98 / ME), DELTREE é o equivalente a RM ou RMDIR . Eu uso DELTREE na minha estação de trabalho do Windows 7 em arquivos em lote muito bem.

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.
    
por 24.06.2016 / 20:30
0

Se você usar o , poderá usar o rimraf dependência como esta:

execute a instalação: npm install rimraf -g

excluir pasta: rimraf SourceFolder

Isso me ajudou ao receber o erro:

the source file names are larger than is supported by the file system

    
por 01.12.2017 / 19:08
0

Eu acho que você 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)"
    
por 16.11.2015 / 15:47