eliminar el directorio recursivo creado por robocopy cuando "El nombre del archivo es demasiado largo"

9

Después de ejecutar robocopy.exe para hacer una copia de seguridad de una carpeta C: \ Users \ sin usar el /xjmodificador, terminé con un directorio recursivo que era demasiado largo. Por ejemplo, si ejecuta dir /b /s, recibirá el siguiente error:

El nombre del directorio C: \ Users \ ... \ AppData \ Local \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Datos \ Datos de la aplicación son demasiado largos.

Intenté eliminarlo rmdir "Application Data" /spero recibí el error "El nombre del archivo es demasiado largo"

Analicé otras soluciones, pero pensé que podría usar la herramienta que causó el problema para resolverlo .

Aaron
fuente

Respuestas:

14

Cree un directorio vacío con mkdir empty, luego use el robocopy empty\ "Application Data\" /mir"cual eliminará todo el árbol de directorios. A continuación, emita una rmdir emptyy rmdir "Application Datapara limpiar y ya está.

Aaron
fuente
3
+1 Increíble que requiere algo tan arcano para hacer algo tan simple como eliminar una carpeta ...
nextgentech
¡Esta carpeta recursiva infinita con errores me estaba volviendo loco! Gracias.
Zofren
4

Es posible que pueda cdprofundizar lo suficiente en el directorio para eliminar lo que está debajo y cdvolver a la parte superior y eliminar lo que queda.

Si eso no funciona y todavía está atascado, descargue la versión de demostración gratuita de mi shell Hamilton C (divulgación completa: soy el autor) y use la rmutilidad que viene con el -r(recursivo) y -x(elimine cualquier cosa ) opciones.

rm -rx directoryname

My rmutiliza el nuevo formato de nombre de archivo Unicode largo internamente, lo que le permite manipular rutas de hasta 32K caracteres, y eso debería ser suficiente.

Si descubre que el problema también involucra permisos, es posible que necesite usar sudoo suelevar, por ejemplo,

sudo rm -rx directoryname

En casos realmente obstinados, puede verse obstaculizado por una ACL que impide el acceso, por ejemplo, caclsinformes Everyone:(DENY). En ese caso, es posible que deba eliminar esa ACE (entrada de control de acceso).

cacls directoryname /e /r everyone

Finalmente, realmente tengo la intención de que esto sea útil. Los registros de mi servidor me dicen que la gente está descargando mi software para probar esto y quiero que funcione. Si encuentra un caso en el que no fue así, espero que me contacte para que pueda depurar por qué y hacerlo funcionar. Las cosas que no puedes eliminar ocurren mucho y me gustaría tener todos los casos cubiertos.

Nicole Hamilton
fuente
3

También puede intentar uno de los siguientes;

Resolución 1: utilice un nombre 8.3 generado automáticamente para acceder al archivo

Resolución 2: cambie el nombre o mueva una carpeta profunda

Resolución 3: Asigne una unidad a una carpeta en la estructura de la ruta Asigne una unidad a una carpeta dentro de la estructura de la ruta del archivo o carpeta de destino. Este método acorta la ruta virtual.

Resolución 4: use un recurso compartido de red que sea tan profundo como la carpeta Si las Resoluciones 1, 2 y 3 no son convenientes o no resuelven el problema, cree un recurso compartido de red que esté lo más profundo posible en el árbol de carpetas, y luego cambie el nombre de las carpetas accediendo al recurso compartido.

Resolución 5: use una herramienta que pueda atravesar caminos profundos

http://support.microsoft.com/kb/320081

Shawn
fuente
esta solución parece ser un tipo de "Resolución 5: Use una herramienta que pueda atravesar caminos profundos"
Aaron