2009-12-03 19:23:09 +0000 2009-12-03 19:23:09 +0000
387
387

Cómo eliminar directorios con rutas/nombres demasiado largos para una eliminación normal

Windows parece tener un límite de longitud en los nombres de los archivos al intentar eliminarlos, aunque no impedirá que se creen esos archivos.

Nuestro proceso de compilación crea una serie de archivos temporales (muchos de ellos construidos a partir de un WSDL) que se salen de este límite. Nuestro script ant es de alguna manera capaz de borrarlos cuando se hace una limpieza, pero a veces necesito borrar el directorio del área de trabajo (donde van todos los archivos temporales) sin hacer realmente una limpieza completa de ant.

Estos son los mismos errores esta pregunta , pero las respuestas allí no me funcionan realmente ya que estoy tratando con un directorio, no con un archivo, y no siempre sé qué archivos o subdirectorios específicos están causando el problema. Y estoy tratando de evitar cualquier proceso manual (aparte de activar un solo comando) para eliminarlos realmente.

Si trato de eliminar el directorio desde el Explorador obtengo el error

Cannot delete [file name]: The file name you specified is not valid or too long.  
Specify a different file name

Remove-Item Al intentar &007 en powershell aparece el siguiente error:

Remove-Item : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
At line:1 char:12
+ Remove-Item <<<< -force -Recurse <directory>

¿Alguien conoce alguna herramienta o forma fácil de sortear este error de eliminación sin tener que encontrar manualmente los archivos problemáticos y moverlos/renombrarlos?

Respuestas (23)

432
432
432
2009-12-03 19:48:56 +0000

Use el 7-Zip Administrador de Archivos para borrarlos.

Si aún tiene problemas, asegúrese de utilizar Mayús+Borrar dentro del Administrador de Archivos del 7-Zip. De lo contrario, Windows intenta moverlos a la Papelera de Reciclaje (que volverá a fallar).

311
311
311
2014-07-04 06:23:55 +0000

Ninguna de las otras respuestas (gratuitas) aquí me funcionaron, pero encontré una en otro sitio:

rimraf <dir>

rimraf es un paquete Node.js , así que tendrás que instalar Node.js que incluye npm . Entonces puedes ejecutar:

npm install -g rimraf

Entonces puedes ejecutar rimraf desde la línea de comandos.

Encontré esta solución porque el propio npm estaba causando este problema debido a la forma en que anida las dependencias.

Por cierto, rimraf obtiene su nombre del comando de UNIX rm -rf, que borra recursivamente archivos y carpetas.

155
155
155
2016-03-03 16:45:54 +0000

No hay necesidad de instalar ningún programa para resolver este problema.

Este problema se resuelve fácilmente usando robocopy, preinstalado desde Windows Vista, lanzado en 2006.

Por ejemplo, se ha informado que rmdir /S /Q <dir> falla en algunos casos. No hay necesidad de usar 7zip o cualquier otra herramienta de terceros. Powershell es una exageración. Cygwin puede funcionar, pero puede que no lo tengas instalado. Así que, centrémonos en robocopy

La idea es

  1. usar robocopy para copiar+actualizar
  2. desde una nueva carpeta vacía
  3. a la carpeta que quieres borrar, el objetivo.

Después de ejecutar robocopy, el directorio de destino también estaría vacío.

Estas instrucciones son para la línea de comandos. Sólo abre la búsqueda en Windows, escribe cmd y pulsa Intro.

Digamos que el destino para borrar es:

C:\delete\this folder\with a very long name

Procedemos de la siguiente manera:

  1. Primero crea un directorio vacío, f.i. C:\emptyfolder.

  2. Copiar+actualizar desde el directorio vacío al objetivo, usando la opción /purge

    1. Borrar el directorio vacío. Ya no lo necesitas.

Como no hay archivos o carpetas en el directorio de origen (C:\emptyfolder), ¡simplemente borra los archivos y carpetas del directorio de destino (C:\delete\this folder\with a very long name) de forma recursiva!

  • Truco final: puedes evitar escribir a mano

Ten cuidado : ¡Los archivos borrados no irán a la carpeta de la basura! Una vez borrados, los archivos no pueden ser recuperados.

(Tomado de “Path too long? Use Robocopy” de BVLANGEN )

PS: Me doy cuenta que esta respuesta estaba aquí, menos didáctica. ¿Cómo borrar un archivo en Windows con un nombre de archivo demasiado largo? [duplicado] Benoit added:

Puede que tenga que pasar por este proceso más de una vez para deshacerse de todos los archivos.

86
86
86
2009-12-03 19:24:08 +0000

Creo que he encontrado una manera de borrar cosas de cmd. Originalmente intenté el comando del, pero no funcionó. Entonces recordé rmdir. Haciendo lo siguiente:

rmdir /S /Q <dir>

parece haber funcionado.

30
30
30
2014-11-25 20:22:32 +0000

La herramienta que utilicé cuando tuve este problema fue FastCopy . Seleccioné Borrar todo del menú desplegable, seleccioné el directorio que quería borrar, y hice clic en Borrar todo.

FastCopy es portátil (no requiere instalación), y hay versiones de 32 y 64 bits disponibles.

26
26
26
2014-09-26 19:40:05 +0000

¡Cygwin’s rm -rf funciona bien en los caminos largos!

26
26
26
2014-10-28 06:09:34 +0000

Sin necesidad de instalar software adicional, puede usar el comando subst para crear temporalmente un alias para un directorio de nombre largo.

, por ejemplo, si desea eliminar la carpeta C:\Very long directory\that exceed\length limit\blah blah blah\abcde\folder to be deleted puede usar el comando

subst x: "C:\Very long directory\that exceed\length limit\blah blah blah\abcde"

y luego puede eliminar X:\folder to be deleted en el Explorador de Windows o en el símbolo del sistema operativo fácilmente. Para eliminar el alias de la letra de unidad temporal utilice el comando

subst x: /d
22
22
22
2011-04-22 16:00:01 +0000

Sólo tienes que pasar de Powershell al mando corriendo hacia abajo:

Cmd /C "rmdir /S /Q <dir>"
18
18
18
2015-06-25 14:19:53 +0000

La solución de Dentrasi es lo que mejor me funcionó, pero quería publicar los pasos específicos en una respuesta de alto nivel.

  1. Descargue e instale la última versión estable de 7zip .
  2. Ejecute el Administrador de Archivos 7zip ( 7zfm.exe ).
  3. En el Administrador de archivos de 7zip, navegue de manera que pueda ver el nombre de la carpeta que desea eliminar (es decir, que está en la carpeta principal).
  4. Mantenga presionada la tecla Shift.
  5. Haga clic en el botón “Borrar”, ya sea en su teclado o en la barra de herramientas del Administrador de archivos de 7zip; asegúrese de seguir manteniendo presionada la tecla Shift.
  6. Haga clic en el botón “Borrar”, ya sea en su teclado o en la barra de herramientas del Administrador de archivos de 7zip; asegúrese de seguir manteniendo presionada la tecla Shift. 6. Haz clic en el botón “OK”; asegúrate de que sigues manteniendo pulsada la tecla Shift.
12
12
12
2016-09-09 10:52:17 +0000

Hay dos cosas que no se mencionan en las respuestas existentes.

  1. Puedes usar el prefijo de camino de longitud extendida para acceder a los caminos largos
  2. Con Windows 10, puede habilitar el soporte para rutas largas para uso general - sin embargo, tenga en cuenta que no todas las aplicaciones funcionarán con rutas largas, debería probar software más antiguo. Sólo el software con una entrada de manifiesto apropiada podrá hacer uso de esto.

Prefijo de camino largo

La API de Windows tiene una función especial que admite nombres de caminos Unicode de hasta 32k caracteres de longitud (cada elemento tiene hasta 255 caracteres de longitud).

A menudo se hace referencia a esto erróneamente como denominación UNC pero no lo es aunque esté relacionado.

El prefijo que se utiliza para indicar a la API que utilice rutas largas de Unicode es `\?Hay dos cosas que no se mencionan en las respuestas existentes.

  1. Puedes usar el prefijo de camino de longitud extendida para acceder a los caminos largos
  2. Con Windows 10, puede habilitar el soporte para rutas largas para uso general - sin embargo, tenga en cuenta que no todas las aplicaciones funcionarán con rutas largas, debería probar software más antiguo. Sólo el software con una entrada de manifiesto apropiada podrá hacer uso de esto.

Prefijo de camino largo

La API de Windows tiene una función especial que admite nombres de caminos Unicode de hasta 32k caracteres de longitud (cada elemento tiene hasta 255 caracteres de longitud).

A menudo se hace referencia a esto erróneamente como denominación UNC pero no lo es aunque esté relacionado.

El prefijo que se utiliza para indicar a la API que utilice rutas largas de Unicode es como en:

\?\D:\very long path

Los nombres UNC se utilizan normalmente al referirse a las rutas de los servidores remotos de la forma \servername\path name\file name. Puede combinar esto con el prefijo de ruta larga así que: \?\UNC\server\share

Tenga en cuenta que algunas aplicaciones, pobremente escritas pero tristemente bastante comunes, no soportan rutas de archivos UNC ni el prefijo de ruta larga.

Referencia: https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath

Soporte para rutas largas

Esta es una opción que ha sido añadida a las versiones recientes de Windows 10. En el momento de escribir este documento, no está activada de forma predeterminada, ya que requiere un soporte específico para la aplicación. Curiosamente, PowerShell tiene soporte incorporado, por lo que al habilitar esta opción se permitirá que las rutas largas se usen directamente en los scripts de PowerShell.

Puede activarla mediante el editor de directiva de grupo si tiene una versión de Windows con eso. O simplemente puede usar el siguiente cambio en el Registro. Como siempre, haga una copia de seguridad de la sección del registro que está cambiando antes de hacer nada.

  1. Ejecute regedit.exe.
  2. Confirme el mensaje UAC.
  3. Navegue hasta la tecla: HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy Objects\{48981759-12F2-42A6-A048-028B3973495F}Machine\System\CurrentControlSet\Policies
  4. Crear o cambiar la tecla LongPathsEnabled.
  5. Si no existe, haga clic con el botón derecho del ratón en Políticas y seleccione Nuevo > Valor de la palabra (32 bits) en el menú.
  6. Configure LongPathsEnabled en 1 para habilitarlo.

Cualquier aplicación con entradas de manifiesto apropiadas tendrá ahora acceso a los caminos largos estándar de POSIX. Esto debería incluir las aplicaciones de Windows Store.

Referencia: https://blogs.msdn.microsoft.com/jeremykuhne/2016/07/30/net-4-6-2-and-long-paths-on-windows-10/

ACTUALIZACIÓN 2017-04-09

@maoizm señaló un problema con la clave de registro anterior, así que hice un poco más de investigación . Parece que ahora se puede establecer el soporte para nombres largos de archivos con una clave de sistema:

HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)

Sin embargo, esto sólo funciona para aplicaciones que estén específicamente establecidas para usarlo (requiere una entrada en el manifest.xml de la aplicación).

También debe tener en cuenta que no puede usar nombres de ruta relativos con este método.

8
8
8
2014-10-28 05:52:15 +0000

Me gusta la solución de cmd. Aunque quiero compartir otra solución que funciona incluso en el Explorador: intenta acortar los nombres de las carpetas principales antes de borrarlas: los nombres más cortos acortarán el camino. Digamos que tienes esta estructura de árbol de la carpeta:

C:\

.. Proyectos

.. .. Algún proyecto impresionante durante la primavera de 2014

.. .. Alguna actividad en el parque de la ciudad un viernes

.. .. … Bla bla bla bla bla bla bla bla bla bla bla

.. .. .. .. … Ficheros reales con nombres largos, también

En este caso no puede eliminar las carpetas, tampoco puede eliminar o renombrar los ficheros. Si desea eliminar toda la estructura de carpetas o parte de ella, puede cambiar temporalmente el nombre de las carpetas principales y acortar la ruta, y luego eliminar la carpeta. Los nombres pueden ser sólo letras:

C:\

.. Proyectos

.. .. x

.. .. .. y

.. .. .. z

.. .. .. .. .. .. .. Archivos reales con nombres largos, también

En mi caso sólo quería eliminar la carpeta completa con muchas subcarpetas y archivos. Así que no me importaban los nombres de las carpetas.

7
7
7
2016-01-11 14:22:54 +0000

La solución 7-zip funciona muy bien. Otra opción si tienes instalado git es abrir un bash shell y usar:

rm -f

(o rm -rf para las carpetas)

4
4
4
2014-04-29 15:47:23 +0000

Sugiero Comandante Total (shareware, pero sigue funcionando después del período de prueba con sólo una pantalla de inicio mínima de regaño). Esa es la forma en que siempre resuelvo los problemas de los nombres de archivo demasiado largos.

2
2
2
2015-02-08 21:07:55 +0000

He creado un simple programa de Java que usa robocopy para borrar los archivos. El frasco es ejecutable. Para una salida adicional ejecútalo desde la línea del cmd. https://drive.google.com/file/d/0B5pSEjxJvt_1WVp1T3puSm1CNjg/view?usp=sharing

2
2
2
2010-11-06 16:24:27 +0000

También puedes borrarlos usando su nombre corto equivalente. dir /x te los mostrará.

1
1
1
2013-12-20 06:10:00 +0000

He intentado todas las otras respuestas, pero no funcionaron (al menos para mí).

Me encontré con delinfile y funcionó bastante bien y bastante rápido!

Su prueba está limitada a 3 acciones / 15 Días pero es utilizable si sólo quieres borrar algunas carpetas/archivos:

1
1
1
2017-10-28 00:35:26 +0000

Tengo la respuesta perfecta aquí (para los archivos). Funciona en Windows 10.

REM Make sure there is no \ at the end of either path!
robocopy "C:\...\...\...\long\path" "C:\DeleteMe" "FileName" /MOV
REM Note: this ^ can be called many times before...:

REM Finally, recursively delete the higher up DeleteMe directory.
rmdir /S /Q DeleteMe

Ver también: https://msdn.microsoft.com/en-us/library/aa365247.aspx#maxpath

Ninguna respuesta alternativa en 4 preguntas fue suficiente para mis necesidades. Eres bienvenido, mundo.

1
1
1
2017-01-09 12:08:22 +0000

Directorios más grandes está diseñado para esta tarea también.

  • Descargar
  • Utiliza una llamada recursiva con RemoveDirectoryW para borrar los directorios existentes
  • Utiliza su propio repositorio de archivos para los directorios recién creados
  • Los archivos pueden ser movidos de los directorios antes de la eliminación de los directorios contagiosos.
  • Rápido, aunque navegar hasta la parte superior del directorio es un clic por cada directorio anidado
  • Windows XP(SP3) y superior
  • Código no administrado sin instalador, por lo que es posible la advertencia de Smartscreen cuando se ejecuta desde una carpeta de repuesto, por ejemplo, el escritorio.

Más información en CodeProject .

1
1
1
2017-06-13 07:52:13 +0000

Me enfrenté a este problema en Windows 10 y encontré esta fácil solución.

  1. Ve un poco más profundo de tu árbol de carpetas.
  2. 2. Arrastrar y soltar una carpeta desde algún lugar en medio del árbol hasta algún lugar del comienzo del árbol usando la barra de direcciones. Como en mi imagen, arrastre y suelte el cuadro rojo al cuadro verde. (en este caso el camino es más corto, pero para caminos largos también funciona)
  3. Entonces tu camino se hace más corto y se borra normalmente usando la tecla de borrar.

0
0
0
2015-06-25 16:47:36 +0000

Finalmente descubrí cómo hacer esto a través de Powershell. Aquí están las instrucciones que seguí para que esto funcione en Windows 7:

  1. Crear una nueva carpeta llamada NTFSSecurity en la carpeta C:\UsuariosXXXX\Documentos\WindowsPowerShell\NMódulos\NNTFSSecurity, donde XXXX es su nombre de usuario de Windows. Ejemplo: si mi nombre de usuario fuera “aspnyc”, la nueva carpeta sería C:\N-Users-aspnyc\N-Documents\NWindowsPowerShell\N-Modules\NNTFSSecurity .

  2. Descargue el Paquete de módulos de PowerShell de seguridad del sistema de archivos - debería estar disponible como un simple archivo ZIP.

    1. Abra una consola Powershell, ejecute Get-Module -ListAvailable y asegúrese de que NTFSSecurity aparezca en algún lugar de la lista de módulos registrados.
  3. En la consola Powershell, ejecute Import-Module NTFSSecurity.

  4. En la consola Powershell, ejecute Remover-Item2 “YYYY” -Recurse , donde YYYY es la ruta de Windows a la carpeta que desea eliminar recursivamente (por ejemplo, C:\Patatas\Badgers\FolderToDelete ).

0
0
0
2015-10-09 16:08:22 +0000

Finalmente descubrí cómo hacer esto con Powershell en Windows 10 donde los nombres de archivo individuales eran demasiado largos. Estos son los pasos que seguí para que esto funcione en Windows 10:

  1. Descargue el Paquete de módulos de seguridad del sistema de archivos de PowerShell - debería estar disponible como un simple archivo ZIP.
  2. Extraer el archivo Zip como una carpeta NTFSSecurity en el directorio C:\WINDOWS\system32\WindowsPowerShell\v1.0\N-Modules.
  3. Abre una consola Powershell con la elevación administrativa (también conocida como Modo Admin) y ejecuta Get-Module -ListAvailable y asegúrate de que NTFSSecurity aparece en algún lugar de la lista de módulos registrados.
  4. Ejecute Set-ExecutionPolicy Unrestricted para evitar el modo de ejecución firmado. Tiene que confirmar esta acción con un Y(es)
  5. Eventualmente cd a la carpeta que desea borrar.
  6. En la consola Powershell, ejecute Import-Module NTFSSecurity.
  7. En la consola Powershell, ejecute Remover-Item2 “YYYY” -Recurse , donde YYYY es la ruta relativa o absoluta de Windows a la carpeta que desea borrar recursivamente (por ejemplo, C:\Patatas\Badgers\FolderToDelete ).
  8. Compruebe si ha funcionado.
  9. Eventualmente vuelva al modo de ejecución firmado con Set-ExecutionPolicy Restricted. Tienes que confirmar esta acción con Y(es).
0
0
0
2019-07-16 21:25:40 +0000

Navegue al directorio en WinRAR, seleccione el archivo, presione F2, cambie el nombre del archivo a un nombre más corto. Luego puedes borrar el archivo como de costumbre.

Fuente: https://www.youtube.com/watch?v=qQTyTprFAOg

0
0
0
2017-07-05 10:44:55 +0000

Si tienes instalado el Bash en Ubuntu en Windows, puedes grabar en un cd el directorio principal en un símbolo del sistema regular y luego escribir:

bash -c "rm -rf dirname_here"

El cual lanza el bash, borra recursivamente el directorio de linux donde no hay restricciones de nombres de archivos, y luego sale de nuevo a tu símbolo del sistema regular.