"rm-rf" equivalente para o Windows?
DEL /S
não apaga directórios.
DELTREE
foi removido do Windows 2000 +
18 answers
RMDIR ou RD se estiver a usar o comando Classic Prompt (cmd.exe):
rd /s /q "path"
Se está a usar o PowerShell, pode usar Remove-Item
(que é apelidado para del
, erase
, rd
, ri
, rm
e rmdir
e toma um argumento -Recurse
que pode ser curto-circuito para -r
rd -r "path"
Administração:
takeown /r /f folder
cacls folder /c /G "ADMINNAME":F /T
rmdir /s folder
Funciona para qualquer coisa, incluindo arquivos de sistemas
Editar: eu realmente encontrei a melhor maneira que também resolve o caminho do arquivo problema demasiado longo também:
mkdir \empty
robocopy /mir \empty folder
RMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path
/S
remove todas as pastas e ficheiros na pasta indicada, para além da própria pasta. usado para remover uma árvore de pastas./Q
Modo silencioso, não perguntar se está ok para remover uma árvore de pastas com/S
Pode instalar o cygwin, que tem rm
assim como ls
etc.
Vá para o caminho e Active este comando.
rd /s /q "FOLDER_NAME"
/ s: remove a pasta indicada e todas as sub-pastas, incluindo quaisquer ficheiros. Use / s para remover uma árvore.
/q: executa o rmdir em modo silencioso. Apaga as pastas sem confirmação.
/? : Mostra a ajuda na linha de comandos.
rmdir /S /Q %DIRNAME%
Para apagar uma pasta (quer exista ou não), use o seguinte:
if exist myfolder ( rmdir /s/q myfolder )
Tente este comando:
del /s foldername
Rmdir / s dirname
Pode instalar O GnuWin32 e usar os comandos * nix nativamente no windows. Instalo isto antes de instalar qualquer outra coisa numa cópia fresca de menta do windows. :)
Crie um ficheiro em lote com a seguinte linha
RMDIR /S %1
Guarde o seu ficheiro em lote como Remove.bat
e coloque - oC:\windows
Criar a seguinte chave de Registo
HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)
Lançar regedit
e actualizar o valor por omissão HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)\default
com o seguinte valor
"c:\windows\REMOVE.bat" "%1"
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 {[2] } é habitualmente utilizado quando se espera que volte 0
:
- o caminho indicado não existe.
- a localização indicada existe e é uma pasta.
- a localização indicada existe e é um ficheiro.
Primeiro define ERRORLEVEL
para 0 e depois apaga a localização apenas se existir, usando comandos diferentes dependendo se é ou não uma pasta. IF EXIST
não configura ERRORLEVEL
para 0 se o caminho não existir, por isso definir o ERRORLEVEL
para 0 primeiro é necessário para detectar correctamente o sucesso de uma forma que imite o uso normal rm -rf
. Guardar o RD
com IF EXIST
é necessário porque RD
, ao contrário de rm -f
, irá lançar um erro se o alvo não existir.
O seguinte excerto de script assume que DELPATH é pré-Citado. (Isto é seguro quando você faz algo como SET DELPATH=%1
. Tente colocar ECHO %1
em um .cmd
e passá-lo um argumento com espaços nele e ver o que acontece por si mesmo). Depois de o excerto terminar, você pode 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%
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 usar isso.
Isto irá apagar "a minha pasta" e o seu conteúdo sem qualquer aviso:
rd /s /q "C:\Users\jerry.g\AppData\Roaming\my folder"
Usando Powershell 5. 1
get-childitem *logs* -path .\ -directory -recurse | remove-item -confirm:$false -recurse -force
Substituir registos pelo nome da pasta que deseja apagar.
Get-childitem procura na pasta de crianças com o nome recursivamente na localização actual (.).
Remove-item apaga o resultado.
Também existe deltree se estiver numa versão mais antiga do windows.
Eu realmente gosto deste site para encontrar comandos: SS64: del-Delete ficheiros
Del /s /q directorytobedeleted