¿Cómo elimino los árboles de directorio a través de un archivo por lotes en Windows 7?


36

Quiero eliminar todo el contenido de una carpeta especificada en Windows 7 a través de un archivo por lotes. Mi problema es que 'del' o 'borrar' solo elimina los archivos, no las carpetas y 'rmdir' o 'rd' siempre eliminan la carpeta especificada con su contenido, pero solo quiero eliminar el contenido, no la carpeta en sí . Probé el comando ' rmdir /S /Q "C:\Share\*"' que me dio un error de sintaxis.

¿Cuál es la forma correcta de hacer esto?

Estoy trabajando en Windows 7 Professional de 64 bits y tengo permisos de administrador.

Respuestas:


36

Su archivo por lotes necesitará ejecutar dos comandos, uno para borrar los archivos y luego otro para eliminar los directorios secundarios. Supuse que el directorio que desea eliminar esC:\Share\

El archivo por lotes debería verse así:

del /s /f /q c:\share\*.*
for /f %%f in ('dir /ad /b c:\share\') do rd /s /q c:\share\%%f

del /s /f /q buscará recursivamente a través del árbol de directorios eliminando cualquier archivo (incluso archivos de solo lectura) sin solicitar confirmación.

La segunda línea recorre todos los subdirectorios (que ahora deberían estar vacíos) y los elimina.

A falta de eliminar toda la carpeta y volver a crearla (¿qué no creo que quiera hacer debido a los permisos?), Esta debería ser la forma más fácil de limpiar la carpeta.


Si hago una pequeña corrección aquí "para / f %% f" -> "para / f% f", entonces funciona bien :) Muchas gracias.
Michael K

66
delno es necesario. rd/s/qeliminará tanto los archivos como las subcarpetas.
Grawity

1
@grawity the delestá principalmente allí para cualquier archivo en la carpeta raíz, aunque podría eliminar el interruptor de recursión.
Windos

55
@MichaelK, %% f se usa en archivos por lotes,% f para cuando se trata de un solo comando directo a la línea de comando.
Windos

1
Si alguno de los nombres de subdirectorio contiene espacios, puede agregar "delims =" para procesarlos correctamente (para / f "delims =" %% f in ...): consulte stackoverflow.com/q/5553040/64918
goldPseudo

27
rmdir /s/q C:\Share

Obtiene un "Error de sintaxis" porque rmdirsolo acepta nombres completos, no comodines. (En cmd.exe, la expansión de comodines se deja a los programas individuales; no todos lo hacen).

Si tiene muchos directorios comenzando Share..., use un forbucle.

for /d %f in (C:\Share*) do rmdir /s/q "%f"

3
No quiero eliminar la carpeta compartida.
Michael K


2

Qué pasa ?

rmdir /S /Q "target"
mkdir "target

EDITAR: por supuesto, esta solución solo es aplicable cuando puede tolerar una ausencia momentánea de la carpeta.


Esto eliminaría la carpeta original.
Michael K

@MichaelK Mi tarea fue capaz de tolerar una ausencia momentánea de carpeta, así que decidí esta solución. Pensé que es más simple y más legible que for /fen casos similares al mío. Solo quería compartir
Vasilly.Prokopyev

2
for /f "delims=" %%f in ('dir /ad /b c:\share\') do rd /s /q c:\share\%%f

Esto no funciona si los subdirectorios contienen otros directorios que contienen espacios.

Para que esto funcione, necesitaba citar la cadena final, como esta

para / f "delims =" %% f in ('dir / ad / bc: \ share \') do rd / s / q "c: \ share \ %% f"

Aparentemente, esto hace que el comando funcione en la cadena citada en lugar de solo la cadena en sí.


0

Intentaría esto en la carpeta donde se deben eliminar todas las subcarpetas pero la raíz (y los archivos en la raíz) se dejan como están: para / D% v en (*) do rd / s / q% v

for / D coincide con los directorios y rd / s / q los elimina a la vez


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.