“Rm-rf” equivalente para Windows?
Pergunta
Eu preciso de uma maneira de apagar recursivamente uma pasta e suas crianças.
Existe uma ferramenta pré-construídos para isso, ou que eu preciso para escrever um?
DEL /S
faz diretórios não de exclusão.
DELTREE
foi removido do Windows 2000 +
Solução
RMDIR ou RD se você estiver usando o clássico Command Prompt (cmd):
rd /s /q "path"
Se você estiver usando PowerShell que você pode usar Remove-Item
(que é alias para del
, erase
, rd
, ri
, rm
e rmdir
) e leva um argumento -Recurse
que pode ser curto para -r
rd -r "path"
Outras dicas
admin:
takeown /r /f folder
cacls folder /c /G "ADMINNAME":F /T
rmdir /s folder
Obras para qualquer coisa, incluindo sys arquivos
EDIT: Na verdade, eu encontrei a melhor maneira que também resolve caminho de arquivo muito longo problema assim:
mkdir \empty
robocopy /mir \empty folder
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. -
Modo
/Q
quieto, não pergunte se ok para remover uma árvore de diretórios com/S
Você pode instalar o cygwin, que tem rm
, bem como ls
etc.
Vá para o caminho e desencadear este comando.
rd /s /q "FOLDER_NAME"
/ S: Remove o diretório especificado e todos os subdiretórios, incluindo quaisquer arquivos. Use / s para remover uma árvore.
/ q: Funciona RmDir no modo silencioso. Exclui diretórios sem confirmação.
/? :. Exibe ajuda no prompt de comando
Para excluir um diretório (ou não existir) use o seguinte:
if exist myfolder ( rmdir /s/q myfolder )
rmdir /S /Q %DIRNAME%
rmdir / s dirname
Tente este comando:
del /s foldername
Em primeiro lugar, vamos rever o que 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
Há três cenários onde rm -rf
é comumente usado onde ele é esperado para 0
retorno:
- O caminho especificado não existe.
- existe O caminho especificado e é um diretório.
- existe O caminho especificado e é um arquivo.
Eu vou ignorar a coisa toda permissões, mas ninguém usa permissões ou tenta negar-se o acesso de gravação em coisas no Windows de qualquer maneira (OK, que está destinado a ser uma piada ...).
conjunto ERRORLEVEL
a 0 e exclua o caminho somente se ele existir, usando comandos diferentes, dependendo se ou não é um diretório. IF EXIST
não define ERRORLEVEL
a 0 se o caminho não existe, assim, definir o ERRORLEVEL
a 0 primeiro é necessário detectar corretamente o sucesso de uma maneira que imita o uso normal rm -rf
. Guardando a RD
com IF EXIST
é necessário porque RD
, ao contrário rm -f
, irá lançar um erro se o destino não existe.
O seguinte trecho de script assume que DELPATH é prequoted. (Isto é seguro quando você faz algo como SET DELPATH=%1
. Tente colocar ECHO %1
em um .cmd
e passá-la uma discussão com espaços nele e ver o que acontece por si mesmo). Depois da conclusão do trecho, você pode verificar se há 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 apenas está em conformidade com POSIX. Ou se instalar um MSYS mínimos e apenas usá-lo.
Você pode instalar GnuWin32 e uso * nix comandos nativamente no Windows. Eu instalar este antes de instalar qualquer outra coisa em uma cópia de hortelã fresca das janelas. :)
Aqui está o que você precisa fazer ...
Crie um arquivo batch com a seguinte linha
RMDIR /S %1
Salvar o arquivo de lote como Remove.bat
e colocá-lo em C:\windows
Criar a seguinte chave do Registro
HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)
regedit
lançamento e atualização do valor padrão HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)\default
com o seguinte valor
"c:\windows\REMOVE.bat" "%1"
É isso! Agora você pode clicar qualquer diretório e usar a função RMDIR
Usando PowerShell 5.1
get-childitem *logs* -path .\ -directory -recurse | remove-item -confirm:$false -recurse -force
Substitua registros com o nome do diretório que deseja excluir.
obter-childitem pesquisas para o diretório crianças com o nome de forma recursiva a partir de caminho atual (.).
Remove-Item exclui o resultado.
A resposta aceita é grande, mas supondo que você tem Node instalado, você pode fazer isso muito mais precisamente com a biblioteca nó "rimraf", que permite englobamento padrões. Se você usa muito isso (eu), 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 permite que você esquivar instalar o global, mas que demora um pouco mais para o download do pacote dinâmico:
npx rimraf .\**\node_modules
aqui é o que funcionou para mim:
Apenas tente diminuir o comprimento do caminho. ou seja :: Mudar o nome todas as pastas que levam a tal arquivo para menores possíveis nomes. Diga nomes de uma só letra. Vá em renomeando para cima na hierarquia de pastas. Por este u efetivamente reduzir o comprimento do caminho. Agora, finalmente, tente excluir o arquivo imediatamente.
via Powershell
Remove-Item -Recurse -Force "TestDirectory"
via Command Prompt
USE POR SUA CONTA E RISCO. INFORMAÇÃO fornecidos 'como'. NÃO testado extensivamente.
o botão direito do mouse no ícone do Windows (geralmente inferior esquerdo)> clique em "Windows PowerShell (Admin)"> usar este comando (com o devido cuidado, você pode facilmente apagar todos os seus arquivos se você não tiver cuidado):
rd -r -include *.* -force somedir
Onde somedir
é o diretório não vazio que você deseja remover.
Note que, com discos ligados externos ou discos com problemas, o Windows às vezes se comporta estranho - não erro no delete (ou qualquer tentativa de cópia), mas o diretório não será excluído (ou não copiado) conforme as instruções. (Eu achei que, neste caso, pelo menos para mim, o comando dado por @n_y em sua resposta vai produzir erros como 'get-childitem:. O arquivo ou diretório está corrompido e ilegível', como um resultado em PowerShell)
Há também deltree se você estiver em uma versão mais antiga do Windows.
Eu realmente gosto deste local para encontrar comandos: SS64: Del - Excluir arquivos
del / s / q directorytobedeleted