Necesito eliminar una carpeta que contiene otras carpetas y archivos dentro. Intenté del
y los rmdir
comandos pero a veces fallan con algunas líneas de error:[PATH]: The directory isn't empty.
¿Hay alguna buena alternativa?
Necesito eliminar una carpeta que contiene otras carpetas y archivos dentro. Intenté del
y los rmdir
comandos pero a veces fallan con algunas líneas de error:[PATH]: The directory isn't empty.
¿Hay alguna buena alternativa?
Respuestas:
Esto me sucede mucho con mis scripts de compilación automatizados.
Supongo que la razón podría ser alguna aplicación que tiene un archivo abierto en ese directorio con "share delete". Es decir, la aplicación permite la eliminación del archivo (por lo que creo que la llamada DeleteFile no falla), pero el archivo solo desaparecerá después de que dicha aplicación haya cerrado su identificador.
Eso significa que el archivo aún puede estar allí cuando el rmdir
comando intenta eliminar la carpeta, de ahí el mensaje de error. Poco después, dicha aplicación cerrará su identificador, el archivo desaparecerá y, cuando inspeccione la carpeta para ver qué archivo rmdir
estaba hablando, estará vacío.
Al menos esa es mi teoría.
La solución propuesta por Harry Johnston se ve bien. Solo insertaría una pausa entre los rmdir
comandos. Por supuesto, Windows no tiene un comando de "pausa" fácilmente programable (corrección: las versiones antiguas de Windows no lo tienen, las más nuevas tienen - vea los comentarios). Pero si la granularidad de segundos es suficiente, se puede usar ping
para crear una pausa:
ping -n {desired_delay_in_seconds + 1} 127.0.0.1 >nul
Entonces en total:
rd /s /q foo
:: retry once
if exist foo (
:: clear errorlevel
cmd /c
:: pause
ping -n 2 127.0.0.1 >nul
:: retry
rd /s /q foo
)
:: retry yet again
if exist foo (
cmd /c
ping -n 2 127.0.0.1 >nul
rd /s /q foo
)
:: give up
if exist foo {panic}
rm -rf /directory/
debe ser global en todos los sistemas operativos.
timeout /t 3
pause
comando).
Tratar:
rmdir /S your_directory
o:
rmdir /S /Q your_directory
para saltear los mensajes de confirmación.
del
y rmdir
no preguntaba nada, solo enviaban algunas líneas como la de la descripción.
rmdir /s
eliminará todo lo que sea posible eliminar. Es posible que tenga archivos bloqueados por un programa, archivos de solo lectura o archivos que necesita acceso administrativo para eliminar. No hay un solo comando que se encargue de todas esas situaciones por usted
Es posible que tenga algunos archivos de solo lectura, puede usar la opción del / F para deshacerse de ellos usando
del /S /F your_directory
rmdir your_directory
También podría tener algunos archivos ocultos y, si está realmente seguro de que desea eliminarlos, puede hacerlo utilizando
del /S /F /AH your_directory
rmdir your_directory
Si esto todavía falla, entonces no tiene permiso para eliminar algunos archivos o algunos de los archivos todavía están en uso.
Creo que hay un error en Windows 7 (y quizás en otras versiones) que a veces causa este síntoma; o podría ser un error en el software de terceros. (¿Tiene Symantec Endpoint Protection instalado por casualidad?)
De todos modos, me he encontrado con bastante frecuencia. En la mayoría de los casos, el problema se puede solucionar ejecutando rd /s /q
dos o tres veces seguidas.
Si está en un archivo por lotes, puede hacer algo como esto:
rd /s /q foo
if exist foo rd /s /q foo
if exist foo rd /s /q foo
if exist foo echo Help! & pause
Úselo del
en los archivos internos, luego rmdir
elimine la carpeta.
Para usar el rmdir
método para eliminar también todos los archivos, use el /S
interruptor antes del nombre del directorio y /Q
suprima la solicitud de eliminación. Esta es la mejor manera de hacerlo, ya que no se pierde ningún archivo. Sin embargo, tenga cuidado al usar el modificador / Q, ya que no le advertirá sobre los atributos del sistema o de los archivos ocultos.
Carpeta versiones anteriores de Windows (DOS, Windows 95/98 / ME), DELTREE
es el equivalente de RM
o RMDIR
. Sin DELTREE
embargo, utilizo en mi estación de trabajo Windows 7 en archivos por lotes.
Deletes a directory and all the subdirectories and files in it.
To delete one or more files and directories:
DELTREE [/Y] [drive:]path [[drive:]path[...]]
/Y Suppresses prompting to confirm you want to delete
the subdirectory.
[drive:]path Specifies the name of the directory you want to delete.
Note: Use DELTREE cautiously. Every file and subdirectory within the
specified directory will be deleted.
Creo que puedes usarlo así:
msg*your file is going to delete
pause
del/s /q "C:\Users\Rd\Desktop\New folder (2)\"
rmdir /s /q "C:\Users\Rd\Desktop\New folder (2)\"
mkdir "C:\Users\Rd\Desktop\New folder (2)"