Necesito eliminar una carpeta que contiene otras carpetas y archivos dentro. Intenté dely los rmdircomandos 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é dely los rmdircomandos 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 rmdircomando 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 rmdirestaba 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 rmdircomandos. 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 pingpara 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
pausecomando).
Tratar:
rmdir /S your_directory
o:
rmdir /S /Q your_directory
para saltear los mensajes de confirmación.
dely rmdirno preguntaba nada, solo enviaban algunas líneas como la de la descripción.
rmdir /seliminará 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 /qdos 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 delen los archivos internos, luego rmdirelimine la carpeta.
Para usar el rmdirmétodo para eliminar también todos los archivos, use el /Sinterruptor antes del nombre del directorio y /Qsuprima 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), DELTREEes el equivalente de RMo RMDIR. Sin DELTREEembargo, 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)"