Equivalente "rm-rf" para o Windows?



cmd wsh (12)

A resposta aceita é ótima, mas supondo que você tenha o Node instalado, você pode fazer isso muito mais precisamente com a biblioteca de nós "rimraf", que permite padrões de globbing. Se você usar muito isso (eu faço), basta instalá-lo globalmente.

yarn global add rimraf

então, por exemplo, um padrão que eu uso constantemente:

rimraf .\**\node_modules

ou para um one-liner que lhe permite evitar a instalação global, mas que demora um pouco mais para o download dinâmico do pacote:

npx rimraf .\**\node_modules

https://ffff65535.com

Eu preciso de uma maneira de excluir recursivamente uma pasta e seus filhos.

Existe uma ferramenta pré-construída para isso, ou eu preciso escrever um?

DEL /S não exclui diretórios.

DELTREE foi removido do Windows 2000+


Aqui está o que você precisa fazer ...

Crie um arquivo em lotes com a seguinte linha

RMDIR /S %1

Salve seu arquivo de lote como Remove.bat e coloque-o em C:\windows

Crie a seguinte chave do Registro

HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)

Inicie o regedit e atualize o valor padrão HKEY_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 em qualquer diretório e usar a função RMDIR


Para excluir um diretório (se ele existe ou não), use o seguinte:

if exist myfolder ( rmdir /s/q myfolder )

Primeiro, vamos rever o que o rm -rf faz:

C:\Users\ohnob\things>touch stuff.txt

C:\Users\ohnob\things>rm -rf stuff.txt

C:\Users\ohnob\things>mkdir stuff.txt

C:\Users\ohnob\things>rm -rf stuff.txt

C:\Users\ohnob\things>ls -l
total 0

C:\Users\ohnob\things>rm -rf stuff.txt

Existem três cenários em que rm -rf é comumente usado onde é esperado que retorne 0 :

  1. O caminho especificado não existe.
  2. O caminho especificado existe e é um diretório.
  3. O caminho especificado existe e é um arquivo.

Eu vou ignorar a coisa toda de permissões, mas ninguém usa permissões ou tenta negar a si mesmas acesso de gravação em coisas no Windows de qualquer forma (OK, isso é para ser uma piada ...).

Primeiro defina ERRORLEVEL como 0 e, em seguida, exclua o caminho somente se ele existir, usando comandos diferentes, dependendo se ele é ou não um diretório. IF EXIST não define ERRORLEVEL como 0 se o caminho não existir, portanto, definir ERRORLEVEL como 0 primeiro é necessário para detectar corretamente o sucesso de uma maneira que imite o uso normal de rm -rf . Guardar o RD com IF EXIST é necessário porque o RD , ao contrário de rm -f , lançará um erro se o destino não existir.

O fragmento de script a seguir pressupõe que DELPATH é prequoted. (Isso é seguro quando você faz algo como SET DELPATH=%1 Tente colocar ECHO %1 em .cmd e passando um argumento com espaços e veja o que acontece por si mesmo). Depois que o snippet for concluído, você poderá verificar a falha com 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%

O ponto é, tudo é mais simples quando o ambiente está em conformidade com o POSIX. Ou se você instalar um MSYS mínimo e apenas usar isso.


Tente este comando:

del /s foldername

Usando o Powershell 5.1

 get-childitem *logs* -path .\ -directory -recurse | remove-item -confirm:$false -recurse -force

Substitua logs pelo nome do diretório que você deseja excluir.

get-childitem procura o diretório children com o nome recursivamente do caminho atual (.).

remove-item exclui o resultado.


Você pode instalar o GnuWin32 e usar comandos * nix originalmente no Windows. Eu instalo isso antes de instalar qualquer outra coisa em uma nova cópia do windows. :)


Você pode instalar o cygwin, que tem rm , ls etc.


aqui está o que funcionou para mim:

Apenas tente diminuir o comprimento do caminho. ie :: Renomeia todas as pastas que levam a tal arquivo para os menores nomes possíveis. Diga um nome de letra. Continue renomeando para cima na hierarquia de pastas. Por isso, reduza efetivamente o comprimento do caminho. Agora, finalmente, tente excluir o arquivo imediatamente.


del / s / q directorytobedeleted


via Powershell

 Remove-Item -Recurse -Force "TestDirectory"

via prompt de comando

https://.com/a/35731786/439130


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 ok para remover uma árvore de diretório com /S





wsh