2008-09-18 15 views
266

Necesito una forma de eliminar recursivamente una carpeta y sus elementos secundarios, ¿hay alguna herramienta precompilada para esto o debo escribir una?RM -rf equivalente para Windows?

DEL/S no elimina los directorios.

DELTREE fue retirado desde Windows 2000+

+0

¿El del/s (a) no funcionan en absoluto (sólo está disponible en algunas versiones) o (b) dejar la directorio de nivel superior, pero elimine todo lo que está debajo de él o (c) deje todos los directorios mientras elimina todos los archivos? – wnoise

+0

@ Aaron, respuesta c, necesita usar rmdir/s para eliminar directorios y archivos. – Wedge

+19

¿No es realmente 'format c:' luego instalación de Linux? Estoy bromeando, por supuesto. –

Respuesta

392

RMDIR o RD si está utilizando el clásico símbolo del sistema (cmd.exe):

rd /s /q "path" 

Si está utilizando PowerShell puede utilizar Remove-Item (que es un alias para del, erase, rd, ri, rm y rmdir) y toma un argumento -Recurse que puede ser cortocircuitado a -r

rd -r "path" 
+53

Vale la pena señalar que para una gran cantidad de archivos, rmdir/s/q es típicamente significativamente más rápido que la operación equivalente "select dir, shift + delete" en el explorador. – Wedge

+1

¿Qué le parece usar banderas para que coincidan con los nombres de los directorios? Si quiero eliminar todos los directorios bajo foo \, 'rmdir/s/q foo \ *' da un error de sintaxis incorrecta. –

+8

Esto no elimina archivos, como lo hace rm -rf, y también devuelve un valor distinto de cero cuando el directorio no existe, por lo que 'rd/s/q foo && echo" yay "' fallará si el directorio es " foo "no existe. –

2

rmdir/s nombredir

2

Prueba este comando:

+0

funcionó para mí en combinación con rmdir/s/q ya que algunos archivos estaban bloqueados y rmdir fallaba en esos. del/foldername nuked los archivos bloqueados que luego permitieron a rmdir deshacerse del directorio raíz. Bonito. – bbqchickenrobot

61

RMDIR [/S] [/Q] [drive:]path

RD [/S] [/Q] [drive:]path

  • /S Elimina todos los directorios y archivos en el directorio especificado además del propio directorio. Se utiliza para eliminar un árbol de directorios.

  • /Q modo silencioso, no le pregunte si bien para eliminar un árbol de directorios con /S

+4

Gracias por la explicación del parámetro. La respuesta aceptada no hace esto, desafortunadamente. – Thomas

13

Puede instalar cygwin, que tiene rm, así como ls etc.

0

Hay también deltree si estás en una versión anterior de Windows.

Me gusta mucho este sitio para comandos Hallazgo: SS64: Del - Delete Files

97

administrador:

takeown /r /f folder 
cacls folder /c /G "ADMINNAME":F /T 
rmdir /s folder 

Obras para cualquier cosa, incluyendo archivos sys

EDIT: De hecho, encontré la mejor manera que también resuelve archivo camino demasiado largo problema también:

mkdir \empty 
robocopy /mir \empty folder 
+2

Esto es lo único que funcionó para mí después de un archivo en el que estaba trabajando encerrado por algo que hice (estúpido: P) ¡Muchas gracias! –

+2

Wow buen truco, nunca visto 'robocopy' – jbnunn

+0

¡Un buen conjunto de trucos! ¡Gracias! – Konrads

2

Puede instalar GnuWin32 y usar comandos * nix de forma nativa en Windows.Instalo esto antes de instalar cualquier otra cosa en una nueva copia minty de Windows. :)

2

Esto es lo que hay que hacer ...

Crear un archivo por lotes con la siguiente línea

RMDIR /S %1

guardar el archivo por lotes como Remove.bat y la puso en C:\windows

Crea la siguiente clave de registro

HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)

lanzamiento regedit y actualizar el valor por defecto HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)\default con el siguiente valor

"c:\windows\REMOVE.bat" "%1"

Eso es todo! Ahora puede hacer clic en cualquier directorio y utilizar la función RMDIR

0

aquí es lo que funcionó para mí:

Solo trata de la disminución de la longitud de la ruta. i.e :: Cambie el nombre de todas las carpetas que conducen a dicho archivo a los nombres más pequeños posibles. Diga los nombres de una letra. Continúa renombrando hacia arriba en la jerarquía de carpetas. De esta forma, se reduce efectivamente la longitud de la ruta. Ahora, finalmente intente eliminar el archivo de inmediato.

1

En primer lugar, vamos a revisar lo rm -rf hace:

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 

Hay tres escenarios en los que se utiliza comúnmente rm -rf donde se espera para volver 0:

  1. La ruta especificada no existe.
  2. La ruta especificada existe y es un directorio.
  3. La ruta especificada existe y es un archivo.

Voy a ignorar todo el asunto de los permisos, pero nadie usa permisos o intenta negarse a sí mismo acceso de escritura en cosas de Windows de todos modos (OK, eso es una broma ...).

Primero set ERRORLEVEL to 0 y luego elimine la ruta solo si existe, usando diferentes comandos dependiendo de si es un directorio o no. IF EXIST no establece ERRORLEVEL en 0 si la ruta de acceso no existe, por lo que establecer el ERRORLEVEL en 0 primero es necesario para detectar correctamente el éxito de una manera que imita el uso normal de rm -rf. Proteger el RD con IF EXIST es necesario porque RD, a diferencia de rm -f, generará un error si el destino no existe.

El siguiente fragmento de script supone que DELPATH está previamente incluido. (Esto es seguro cuando haces algo como SET DELPATH=%1. Trata de poner ECHO %1 en un .cmd y pasarle un argumento con espacios y ver qué sucede por ti mismo). Una vez que se complete el fragmento, puede verificar si se produjo un error con 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% 

Point is, todo es más simple cuando el entorno solo se ajusta a POSIX. O si instala un MSYS mínimo y simplemente lo usa.

0

del/s/q directorytobedeleted

+2

Intenta agregar alguna descripción/explicación. –

8

Ir a la ruta y activar este comando.

rd /s /q "FOLDER_NAME" 

/s: elimina el directorio especificado y todos los subdirectorios, incluidos los archivos. Use/s para eliminar un árbol.

/q: Ejecuta rmdir en modo silencioso. Elimina directorios sin confirmación.

/? : Muestra ayuda en el símbolo del sistema.

3

Para borrar un directorio (o no existe) Utilice los siguientes:

if exist myfolder (rmdir /s/q myfolder) 
Cuestiones relacionadas