¿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.

Michael K
fuente

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.

Windos
fuente
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"
Gravedad
fuente
3
No quiero eliminar la carpeta compartida.
Michael K
12

Pruebe esto en un símbolo del sistema:

rd /s/q "C:\Share"
Chau Chee Yang
fuente
2
Esto también eliminó la carpeta principal, no el contenido de la carpeta.
Teoman shipahi
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.

Vasilly.Prokopyev
fuente
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í.

Jim JR Harris
fuente
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

Otto Hänninen
fuente
0

simplemente:

rmdir / s / q "ruta"

mkdir "camino"

eli
fuente
1
Este es un duplicado de esta respuesta .
Digo reinstalar a Mónica el