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 +

Foi útil?

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:

  1. O caminho especificado não existe.
  2. existe O caminho especificado e é um diretório.
  3. 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

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

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top