Estoy haciendo un script por lotes y parte del script está tratando de eliminar un directorio y todos sus subdirectorios. Recibo un error intermitente acerca de que un subdirectorio no está vacío. Leí un artículo sobre la indexación como culpable. Inhabilité WSearch pero finalmente volví a recibir el error. Aquí está el comando:
rmdir /S /Q "C:\<dir>\"
windows
batch-file
Violencia
fuente
fuente
Respuestas:
Experimenté los mismos problemas que mencionó Harry Johnston.
rmdir /s /q
¡Se quejaría de que un directorio no estaba vacío aunque/s
esté destinado a vaciarlo por usted! Creo que es un error en Windows, personalmente.Mi solución es
del
todo en el directorio antes de eliminar el directorio en sí:(
1>nul
Oculta la salida estándar dedel
porque, de lo contrario, enumera todos los archivos que elimina).fuente
mydir
producían el mismo error "no vacío". Así que también tuve quecd
ingresarmydir
y realizar la operacióndel
en los archivos en cada uno de esos directorios. Al final funcionó, pero si hubiera tenido que repetir el proceso por tercera vez en otro subnivel, me habría sentido bastante derrotado.del /s
hace.rd /s /q mydir
comando.Estoy familiarizado con este problema. La solución alternativa más sencilla es repetir condicionalmente la operación. Nunca lo he visto fallar dos veces seguidas, a menos que realmente haya un archivo abierto o un problema de permisos, ¡obviamente!
fuente
IF EXIST
pielesAccess is denied
y otras situaciones. He añadido algo comoDIR c:\deleteme
y la comprobación de errores antes de todo.ingrese el símbolo del sistema como administrador y ejecute
fuente
Acabo de encontrar el mismo problema y tenía que ver con la pérdida o la corrupción de algunos archivos. Para corregir el problema, simplemente ejecute check disk:
Esto se puede ejecutar desde el cuadro de la ventana de búsqueda o desde un indicador de cmd. La
/F
soluciona cualquier problema que encuentra, al igual que la recuperación de los archivos. Una vez que esto termine de ejecutarse, puede eliminar los archivos y carpetas como de costumbre.fuente
Tuve un problema similar, intenté eliminar una carpeta vacía a través del explorador de Windows. Me mostró el error no vacío, así que pensé en intentarlo a través de admin cmd, pero ninguna de las respuestas aquí ayudó.
Después de que moví un archivo a la carpeta vacía. Pude eliminar la carpeta no vacía
fuente
Como @gfullam declaró en un comentario a la respuesta de @ BoffinbraiN, es posible que el
<dir>
que se está eliminando no sea el que contiene los archivos: puede haber subdirectorios en los<dir>
que aparece un mensaje "El directorio no está vacío" y la única solución entonces sería iterar recursivamente sobre los directorios, eliminando manualmente todos los archivos que los contienen ... Terminé decidiendo usar un puerto derm
UNIX.rm.exe
viene con Git Bash, MinGW, Cygwin, GnuWin32 y otros. Solo necesita tener su directorio padre en su PATH y luego ejecutarlo como lo haría en un sistema UNIX.Ejemplo de secuencia de comandos por lotes:
fuente
Lo que funcionó para mí es lo siguiente. Parece que el comando RMDir emitirá "El directorio no está vacío" casi todo el tiempo ...
fuente
Tenía "C: \ Users \ User Name \ OneDrive \ Fonts", que estaba mklink'ed (/ D) a "C: \ Windows \ Fonts", y tuve el mismo problema. En mi caso
me ayudó. Espero que también te ayude; D
fuente
En mi caso, acabo de mover la carpeta al directorio raíz como tal.
Y luego ejecutó el comando para eliminar el directorio
fuente
rmdir c:\<moved directory> /s /q
es la respuesta correctaLa razón por la que se
rd /s
niega a eliminar ciertos archivos probablemente se deba a los atributos de archivo READONLY en los archivos del directorio.La forma correcta de solucionar esto es asegurarse de restablecer los atributos en todos los archivos primero:
Puede haber otros, como archivos ocultos o del sistema, así que si quieres ir a lo seguro:
fuente
Similar a la respuesta de Harry Johnston, hago un bucle hasta que funciona.
fuente
Windows a veces está "roto por diseño", por lo que debe crear una carpeta vacía y luego reflejar la "carpeta rota" con una "carpeta vacía" con modo de copia de seguridad.
Cree un directorio vacío como este:
sobrescribir la carpeta rota con un vacío como este:
y luego borra esa carpeta
Si esto no ayuda, intente reiniciar en "modo de recuperación con símbolo del sistema" manteniendo presionada la tecla Mayús cuando haga clic en reiniciar e intente ejecutar estos comandos nuevamente en modo de recuperación
fuente
/W:0
para evitar retrasos innecesarios. Es posible que no lo desee/b
porque eso requiere privilegios administrativos. El modo de recuperación no es relevante para esta pregunta, porque estamos hablando de un script por lotes, no de alguien que intenta eliminar manualmente un directorio.Puedo pensar en las siguientes causas posibles:
Para 1.) puede intentar
runas /user:Administrator
obtener mayores privilegios o iniciar el archivo por lotes como administrador a través del menú contextual. Si eso no ayuda, tal vez incluso el administrador no tenga los derechos. Luego, debe asumir la propiedad del directorio.Para 2.) descargue Process Explorer , haga clic
Find/Find handle or DLL...
o presione Ctrl+F, escriba el nombre del directorio y averigüe quién lo usa. Cierre la aplicación que usa el directorio, si es posible.fuente