2008-12-03 25 views
63

En versiones anteriores de MS-DOS, quiero decir la versión 7, pero podría estar equivocado, había un comando deltree, que eliminó recursivamente todos los subdirectorios y archivos de una ruta determinada.¿Qué pasó con deltree, y cuál es su reemplazo?

deltree ya no existe, pero del no parece heredar la capacidad de eliminar un árbol. del /s borra archivos, pero no carpetas.

¿Cómo de fácil (es decir, en un comando) eliminar un árbol de un archivo por lotes?

+0

deltree se introdujo en la versión 5.0 (Todavía recuerdo el placer de poder usarlo) - Hombre, me siento viejo. –

Respuesta

66

Como han mencionado otros, el comando rd tiene el modificador /s para eliminar recursivamente los subdirectorios. Se puede combinar con el interruptor /q eliminar la fuerza a un subdirectorio (y su contenido) sin preguntar como tan

rd /s /q c:\foobar 

Lo que todo el mundo que falta es que rd es no un reemplazo exacto para deltree tan aparentemente (almost) cada página devuelta por Google para windows deltree le haría creer. El comando deltree funcionó para los directorios y los archivos, lo que lo convierte en un solo comando de eliminación conveniente para todos los propósitos. Es decir ambos de los siguientes son válidos:

deltree /y c:\foobar 
deltree /y c:\baz.txt 

Sin embargo rd (como es lógico) sólo funciona para los directorios.Como tal, sólo el primero de estos comandos es válida mientras que la segunda da y error y deja el archivo no-borrado:

rd /s /q c:\foobar 
rd /s /q c:\baz.txt 

Además, el comando del sólo funciona para archivos, no directorios, por lo que sólo el segundo comando es válida mientras que el primero da un error:

del /f /q c:\foobar 
del /f /q c:\baz.txt 

no hay manera integrada para borrar archivos y directorios que se podría hacer con deltree. Usar rd y del individualmente es inconveniente en el mejor de los casos porque requiere distinguir si un objeto de sistema de archivos (nombre de archivo/carpeta) es un archivo o directorio que no siempre es posible o práctico.

Puede copiar el comando deltree de un sistema operativo anterior, sin embargo, solo funcionará en las versiones de 32 bits de Windows, ya que es un comando de DOS de 16 bits (incluso en Windows 9x).

Otra opción es crear un archivo de proceso por lotes que llame tanto a del como a rd; algo como esto:

::deltree.bat 

@echo off 
rd %* 2> nul 
del %* 2> nul 

Usted diría que es como tan:

deltree.bat /s /q /f c:\foobar 
deltree.bat /s /q /f c:\baz.txt 

Para esto se necesitan tanto rd y del, pasando los argumentos y redirigiendo la salida a nul para evitar el error que uno de ellos invariablemente emitirá.

Es probable que desee personalizar el comportamiento para acomodar o simplificar parámetros o permitir los mensajes de error, pero aún así, no es ideal y no es un reemplazo directo para deltree.

Una alternativa es obtener una herramienta de terceros, aunque encontrar uno es un ejercicio real en la búsqueda-consulta-elaboración.

+1

@TobyAllen, "rm"? ¿Querías decir * rd *? Si es así, entonces necesita volver a leer el texto de ayuda; dice * Elimina todos los directorios y archivos ** en el directorio especificado ** además del directorio en sí. Se usa para eliminar un árbol de directorios. * Como dije, no elimina archivos. Si lo usa como tal: 'rd/s foobar.txt', le preguntará si está seguro, y si diga que sí (o use el interruptor'/q'), entonces dará el error 'El nombre del directorio es inválido.' – Synetech

+0

En realidad, puede eliminar todo lo que se encuentre debajo de un directorio (incluidos sus subdirectorios) con' RMDIR/S', por lo que decir que no hay manera de eliminar ambos archivos y carpetas de una sola vez es incorrecto. – vapcguy

4
rmdir /s /q directory 
4
$ help rd 
Removes (deletes) a directory. 

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

    /S  Removes all directories and files in the specified directory 
      in addition to the directory itself. Used to remove a directory 
      tree. 

    /Q  Quiet mode, do not ask if ok to remove a directory tree with /S 
2

En realidad RMDIR y RD comandos en el sistema operativo Windows moderno se unen tanto el RD comandos y Deltree de Windows 98 en un solo comando. Es un comando interno por lo que no encontrará ningún RD.exe y RMDIR.exe.

Al escribir este "RD /?" en cmd sin double qoutes obtendrá exactamente lo que desea.

6

Sintiéndome nostálgico, escribí mi propio deltree.exe. Funciona con directorios y archivos, y usa SHFileOperation() para la velocidad.

https://github.com/ai7/toolbox/tree/master/deltree

deltree v1.01 [Mar 27 2015, 16:31:02] (gcc 4.9.1) 

Usage: deltree [options] <path> ... 

Options: 
    -y yes, suppresses prompting for confirmation 
    -s silent, do not display any progress dialog 
    -n do nothing, simulate the operation 
    -f force, no prompting/silent (for rm compatibility) 
    -r ignored (for rm compatibility) 

Delete directories and all the subdirectories and files in it. 

Se necesita comodines y se puede utilizar como Unix rm:

deltree -rf * 
0

para borrar un directorio y todo su contenido de forma recursiva

rd /s MY_DOOMED_DIR 
2

Hoy en día, puede usar Powershell para hacer la misma tarea:

powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force" 
Cuestiones relacionadas