Del / s (a) não funciona (está disponível apenas em algumas versões) ou (b) sai do diretório de nível superior, mas apaga tudo sob ele ou (c) deixa todos os diretórios enquanto exclui todos os arquivos?
Wnoise 19/09/08
@ Aaron, resposta c, você precisa usar o rmdir / s para remover diretórios e arquivos.
Wedge
31
Não é realmente a format c:instalação do Linux? Estou brincando, é claro.
Basile Starynkevitch 25/03
Respostas:
694
RMDIR ou RD se você estiver usando o prompt de comando clássico (cmd.exe):
rd /s /q "path"
Caminho RMDIR [/ S] [/ Q] [drive:]
Caminho RD [/ S] [/ Q] [drive:]
/ S Remove todos os diretórios e arquivos no diretório especificado, além do próprio diretório. Usado para remover uma árvore de diretórios.
/ Q Modo silencioso, não pergunte se está OK para remover uma árvore de diretórios com / S
Se você estiver usando PowerShell que você pode usar Remove-Item(que é alias para del, erase, rd, ri, rme rmdir) e leva um -Recurseargumento que pode ser curto para-r
Vale ressaltar que, para um grande número de arquivos, o rmdir / s / q geralmente é significativamente mais rápido que a operação equivalente "select dir, shift + delete" no explorer.
Cunha
9
Isso não exclui arquivos, como rm -rf, e também retorna um valor diferente de zero quando o diretório não existe, portanto rd /s /q foo && echo "yay"falhará se o diretório "foo" não existir.
Dirk Groeneveld
17
E se dir. não está vazio e alguns arquivos ficam Access is deniede outros The process cannot access the file because it is being used by another process?
Eugene
6
Eu apenas tentei isso em sete anos e você precisa fazer / S e / Q (Caps)
prefeito do ford
2
Mistificado aqui. Eu sei que tentei esse comando e não funcionou se houvesse arquivos na árvore de diretórios; agora eu volto e. . . magicamente parece funcionar. Alguém mais experimentou um comportamento inconsistente com isso ?!
Meu heroi! E uma dica: Você cria a sua pasta vazia em C: \ esvaziar, em seguida, uma vez dentro de cada pasta louco, um pode apenas fazerrobocopy /mir c:\empty .
Léon Pelletier
Eles takeownme ajudaram enquanto eu copiava a pasta do sistema Linux com o rsync por engano e não tinha privilégios para remover essa pasta ... Nem mesmo a robocópia funcionava. Graças
Jarda
1
Resposta muito boa. Funciona. (todas as outras respostas da página não). Mas cacls está obsoleto. É possível fazer uma resposta contemporânea, por favor? A segunda variante já funciona e não é preterida.
Gangnus
Isso não faz nada por mim. Alguém poderia explicar como deve funcionar? (robocopy) - Pode eliminar conteúdo de pastas, mas não pastas si
Ralf
114
RMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path
/S Remove todos os diretórios e arquivos no diretório especificado, além do próprio diretório. Usado para remover uma árvore de diretórios.
/Q Modo silencioso, não pergunte se está OK para remover uma árvore de diretórios com /S
A resposta aceita é ótima, mas supondo que você tenha o Node instalado, você pode fazer isso com muito mais precisão com a biblioteca de nós "rimraf", que permite padrões de globbing. Se você usa muito isso (eu uso), basta instalá-lo globalmente.
yarn global add rimraf
então, por exemplo, um padrão que eu uso constantemente:
rimraf .\**\node_modules
ou para uma linha única que permite evitar a instalação global, mas que demora um pouco mais para o download dinâmico do pacote:
trabalhou para mim em combinação w / rmdir / s / q, pois alguns arquivos estavam bloqueados e o rmdir falharia nesses. del / foldername colocou os arquivos bloqueados, que permitiram ao rmdir se livrar do diretório raiz. Agradável.
Existem três cenários nos quais rm -rfé comumente usado o retorno esperado 0:
O caminho especificado não existe.
O caminho especificado existe e é um diretório.
O caminho especificado existe e é um arquivo.
Eu vou ignorar toda a coisa das permissões, mas ninguém usa permissões ou tenta negar a si mesmo o acesso de gravação às coisas no Windows de qualquer maneira (OK, isso é uma piada ...).
Primeiro, defina ERRORLEVELcomo 0 e, em seguida, exclua o caminho apenas se existir, usando comandos diferentes, dependendo de ser ou não um diretório. IF EXISTnão define ERRORLEVELcomo 0 se o caminho não existir; portanto, ERRORLEVELé necessário definir primeiro como 0 para detectar corretamente o sucesso de uma maneira que imite o rm -rfuso normal . É necessário proteger o RDcom , IF EXISTporque RD, ao contrário rm -f, lançará um erro se o destino não existir.
O seguinte snippet de script supõe que DELPATH seja pré-citado. (Isso é seguro quando você faz algo parecido SET DELPATH=%1. Tente colocar ECHO %1um .cmde passar um argumento com espaços e veja o que acontece por si mesmo). Após a conclusão do snippet, você pode verificar se há falhas IF ERRORLEVEL 1.
: # Determine whether we need to invoke DEL or RD or do nothing.
SET DELPATH_DELMETHOD=RD
PUSHD %DELPATH% 2>NUL
IF ERRORLEVEL 1 (SET DELPATH_DELMETHOD=DEL) ELSE (POPD)
IF NOT EXIST %DELPATH% SET DELPATH_DELMETHOD=NOOP
: # Reset ERRORLEVEL so that the last command which
: # otherwise set it does not cause us to falsely detect
: # failure.
CMD /C EXIT 0
IF %DELPATH_DELMETHOD%==DEL DEL /Q %DELPATH%
IF %DELPATH_DELMETHOD%==RD RD /S /Q %DELPATH%
A questão é que tudo é mais simples quando o ambiente está em conformidade com o POSIX. Ou se você instalar um MSYS mínimo e apenas usá-lo.
Você pode instalar o GnuWin32 e usar os comandos * nix nativamente no Windows. Eu instalo isso antes de instalar qualquer outra coisa em uma cópia nova e minty do Windows. :)
USE POR SUA CONTA E RISCO. INFORMAÇÃO FORNECIDA 'NO ESTADO EM QUE SE ENCONTRA'. NÃO TESTADO EXTENSIVAMENTE.
Clique com o botão direito do mouse no ícone do Windows (geralmente no canto inferior esquerdo)> clique em "Windows PowerShell (Admin)"> use este comando (com o devido cuidado, você poderá excluir facilmente todos os seus arquivos se não for cuidadoso):
rd -r -include *.* -force somedir
Onde somedirestá o diretório não vazio que você deseja remover.
Observe que, com discos externos conectados ou com problemas, o Windows às vezes se comporta de maneira estranha - ele não comete um erro na exclusão (ou em qualquer tentativa de cópia), mas o diretório não é excluído (ou copiado) conforme as instruções. (Descobri que, nesse caso, pelo menos para mim, o comando dado por @n_y em sua resposta produzirá erros como 'get-childitem: o arquivo ou diretório está corrompido e ilegível'. Como resultado no PowerShell)
ATRASADO, MAS RESPOSTA IMPORTANTE a qualquer um que esteja com problemas para instalar pacotes npm na máquina Windows e se você estiver vendo o erro dizendo " rm -rf..." o comando não foi encontrado. Você pode usar o bash cli para executar o comando rm no Windows.
para usuários do npm, você pode alterar a configuração do npm npm config set script-shell "C:\Program Files\Git\bin\bash.exe"dessa maneira, se o pacote npm que você está tentando instalar tiver um script de pós-instalação que usa o rm -rfcomando, você poderá executar esse rmcomando sem precisar alterar nada no pacote npm ou desativar a configuração dos scripts pós-instalação. (Por exemplo, styled-componentsusa o rmcomando em seus scripts de pós-instalação)
Se você quiser apenas usar o rm comando, poderá usar facilmente o bash e passar os argumentos.
Então, sim, você pode usar o comando 'rm' no Windows.
Apenas tente diminuir o comprimento do caminho. ou seja: :: Renomeie todas as pastas que levam a esse arquivo para os menores nomes possíveis. Diga os nomes de uma letra. Continue renomeando para cima na hierarquia de pastas. Com isso, você reduz efetivamente o comprimento do caminho. Agora, finalmente, tente excluir o arquivo imediatamente.
format c:
instalação do Linux? Estou brincando, é claro.Respostas:
RMDIR ou RD se você estiver usando o prompt de comando clássico (cmd.exe):
Se você estiver usando PowerShell que você pode usar
Remove-Item
(que é alias paradel
,erase
,rd
,ri
,rm
ermdir
) e leva um-Recurse
argumento que pode ser curto para-r
fonte
rd /s /q foo && echo "yay"
falhará se o diretório "foo" não existir.Access is denied
e outrosThe process cannot access the file because it is being used by another process
?admin:
Funciona para qualquer coisa, incluindo arquivos sys
Edição: Na verdade, eu encontrei a melhor maneira que também resolve o problema de caminho de arquivo muito longo também:
fonte
robocopy /mir c:\empty .
takeown
me ajudaram enquanto eu copiava a pasta do sistema Linux com o rsync por engano e não tinha privilégios para remover essa pasta ... Nem mesmo a robocópia funcionava. GraçasRMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path
/S
Remove todos os diretórios e arquivos no diretório especificado, além do próprio diretório. Usado para remover uma árvore de diretórios./Q
Modo silencioso, não pergunte se está OK para remover uma árvore de diretórios com/S
fonte
Você pode instalar o cygwin, que possui
rm
e tambémls
etc.fonte
Vá para o caminho e acione este comando.
/ s: remove o diretório especificado e todos os subdiretórios, incluindo todos os arquivos. Use / s para remover uma árvore.
/ q: Executa o rmdir no modo silencioso. Exclui diretórios sem confirmação.
/? : Exibe ajuda no prompt de comando.
fonte
Para excluir um diretório (se ele existe ou não), use o seguinte:
fonte
rmdir /S /Q %DIRNAME%
fonte
A resposta aceita é ótima, mas supondo que você tenha o Node instalado, você pode fazer isso com muito mais precisão com a biblioteca de nós "rimraf", que permite padrões de globbing. Se você usa muito isso (eu uso), basta instalá-lo globalmente.
então, por exemplo, um padrão que eu uso constantemente:
ou para uma linha única que permite evitar a instalação global, mas que demora um pouco mais para o download dinâmico do pacote:
fonte
Tente este comando:
fonte
rmdir / s dirname
fonte
Primeiro, vamos revisar o que
rm -rf
faz:Existem três cenários nos quais
rm -rf
é comumente usado o retorno esperado0
:Eu vou ignorar toda a coisa das permissões, mas ninguém usa permissões ou tenta negar a si mesmo o acesso de gravação às coisas no Windows de qualquer maneira (OK, isso é uma piada ...).
Primeiro, defina
ERRORLEVEL
como 0 e, em seguida, exclua o caminho apenas se existir, usando comandos diferentes, dependendo de ser ou não um diretório.IF EXIST
não defineERRORLEVEL
como 0 se o caminho não existir; portanto,ERRORLEVEL
é necessário definir primeiro como 0 para detectar corretamente o sucesso de uma maneira que imite orm -rf
uso normal . É necessário proteger oRD
com ,IF EXIST
porqueRD
, ao contráriorm -f
, lançará um erro se o destino não existir.O seguinte snippet de script supõe que DELPATH seja pré-citado. (Isso é seguro quando você faz algo parecido
SET DELPATH=%1
. Tente colocarECHO %1
um.cmd
e passar um argumento com espaços e veja o que acontece por si mesmo). Após a conclusão do snippet, você pode verificar se há falhasIF ERRORLEVEL 1
.A questão é que tudo é mais simples quando o ambiente está em conformidade com o POSIX. Ou se você instalar um MSYS mínimo e apenas usá-lo.
fonte
via Powershell
via prompt de comando
https://stackoverflow.com/a/35731786/439130
fonte
Aqui está o que você precisa fazer ...
Crie um arquivo em lotes com a seguinte linha
RMDIR /S %1
Salve seu arquivo em lotes como
Remove.bat
e coloque-oC:\windows
Crie a seguinte chave do Registro
HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)
Inicie
regedit
e atualize o valor padrãoHKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)\default
com o seguinte valor"c:\windows\REMOVE.bat" "%1"
É isso aí! Agora você pode clicar com o botão direito do mouse em qualquer diretório e usar a função RMDIR
fonte
Usando o PowerShell 5.1
Substitua os logs pelo nome do diretório que você deseja excluir.
O get-childitem pesquisa o diretório filho com o nome recursivamente do caminho atual (.).
remove-item exclui o resultado.
fonte
Você pode instalar o GnuWin32 e usar os comandos * nix nativamente no Windows. Eu instalo isso antes de instalar qualquer outra coisa em uma cópia nova e minty do Windows. :)
fonte
USE POR SUA CONTA E RISCO. INFORMAÇÃO FORNECIDA 'NO ESTADO EM QUE SE ENCONTRA'. NÃO TESTADO EXTENSIVAMENTE.
Clique com o botão direito do mouse no ícone do Windows (geralmente no canto inferior esquerdo)> clique em "Windows PowerShell (Admin)"> use este comando (com o devido cuidado, você poderá excluir facilmente todos os seus arquivos se não for cuidadoso):
Onde
somedir
está o diretório não vazio que você deseja remover.Observe que, com discos externos conectados ou com problemas, o Windows às vezes se comporta de maneira estranha - ele não comete um erro na exclusão (ou em qualquer tentativa de cópia), mas o diretório não é excluído (ou copiado) conforme as instruções. (Descobri que, nesse caso, pelo menos para mim, o comando dado por @n_y em sua resposta produzirá erros como 'get-childitem: o arquivo ou diretório está corrompido e ilegível'. Como resultado no PowerShell)
fonte
ATRASADO, MAS RESPOSTA IMPORTANTE a qualquer um que esteja com problemas para instalar pacotes npm na máquina Windows e se você estiver vendo o erro dizendo "
rm -rf...
" o comando não foi encontrado. Você pode usar o bash cli para executar o comando rm no Windows.para usuários do npm, você pode alterar a configuração do npm
npm config set script-shell "C:\Program Files\Git\bin\bash.exe"
dessa maneira, se o pacote npm que você está tentando instalar tiver um script de pós-instalação que usa orm -rf
comando, você poderá executar esserm
comando sem precisar alterar nada no pacote npm ou desativar a configuração dos scripts pós-instalação. (Por exemplo,styled-components
usa orm
comando em seus scripts de pós-instalação)Se você quiser apenas usar o
rm
comando, poderá usar facilmente o bash e passar os argumentos.Então, sim, você pode usar o comando 'rm' no Windows.
fonte
aqui está o que funcionou para mim:
Apenas tente diminuir o comprimento do caminho. ou seja: :: Renomeie todas as pastas que levam a esse arquivo para os menores nomes possíveis. Diga os nomes de uma letra. Continue renomeando para cima na hierarquia de pastas. Com isso, você reduz efetivamente o comprimento do caminho. Agora, finalmente, tente excluir o arquivo imediatamente.
fonte
Também há deltree se você estiver em uma versão mais antiga do Windows.
Eu realmente gosto deste site para encontrar comandos: SS64: Del - Excluir arquivos
fonte
del / s / q directorytobedeleted
fonte