Windows parece tener un límite de longitud en los nombres de los archivos cuando intenta eliminarlos, aunque no evitará que se creen esos archivos.
Nuestro proceso de compilación crea una cantidad de archivos temporales (muchos compilados a partir de un WSDL) que no cumplen con este límite. Nuestro script de hormiga de alguna manera puede eliminarlos cuando se realiza una limpieza, pero a veces necesito eliminar el directorio del área de trabajo (donde van todos los archivos temporales) sin realmente hacer una limpieza completa de la hormiga.
Estos son los mismos errores que esta pregunta , pero las respuestas allí realmente no funcionan para mí, 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 (que no sea activar un solo comando) para eliminarlos.
Si intento eliminar el directorio de Explorer, aparece el error
Cannot delete [file name]: The file name you specified is not valid or too long.
Specify a different file name
Probar Remove-Item
en powershell da 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 sabe de alguna herramienta o formas fáciles de evitar este error de eliminación sin tener que buscar manualmente los archivos problemáticos y moverlos / cambiarles el nombre?
fuente
Ubuntu
o cualquier otroLinux Bootable CD
, podemos arrancar nuestra computadoraUbuntu
o cualquier otro sistema operativo por tiempo. Entonces podemos seleccionar la carpeta y podemos eliminarla fácilmente.Respuestas:
Use el Administrador de archivos 7-Zip para eliminarlos.
Si todavía tiene problemas, asegúrese de utilizar Shift+ Deletedentro del Administrador de archivos 7-Zip. De lo contrario, Windows intenta moverlos a la Papelera de reciclaje (que volverá a fallar).
fuente
shift + Del
como @cori dijo. Si selecciona laDelete
opción del menú contextual, fallará allí.shift + Del
¡eso!Ninguna de las otras respuestas (gratuitas) aquí funcionó para mí, pero encontré una en otro sitio:
rimraf es un paquete de Node.js , por lo que deberá instalar Node.js, que incluye npm . Entonces puedes ejecutar:
Entonces puedes correr
rimraf
desde la línea de comando.Encontré esta solución porque npm estaba causando este problema debido a la forma en que anida las dependencias.
Por cierto,
rimraf
obtiene su nombre del comando UNIXrm -rf
, que elimina recursivamente archivos y carpetas.fuente
No es necesario 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,
rmdir /S /Q <dir>
se ha informado que falla en algunos casos. No es necesario usar 7zip ni ninguna otra herramienta de terceros. Powershell es una exageración. Cygwin puede funcionar, pero es posible que no lo tenga instalado. Entonces, centrémonos enrobocopy
La idea es
robocopy
para copiar + actualizadoDespués de ejecutar
robocopy
, el directorio de destino también estaría vacío.Estas instrucciones son para la línea de comando. Simplemente abra la búsqueda en Windows, escriba
cmd
y presione Entrar.Digamos que el objetivo para la eliminación es:
Procedemos de la siguiente manera:
Primero crea un directorio vacío, fi
C:\emptyfolder
.Copiar + actualizar desde el directorio vacío al destino, usando la opción
/purge
Eliminar el directorio vacío. Ya no lo necesitas.
Como no hay archivos o carpetas en el directorio de origen (
C:\emptyfolder
), simplemente elimina los archivos y carpetas en el directorio de destino (C:\delete\this folder\with a very long name
) de forma recursiva.Truco final: puedes evitar escribir a mano
Arrastrando la carpeta desde una ventana del Explorador y soltándola en la ventana Terminal / cmd.
Tenga cuidado : ¡los archivos eliminados no irán a la carpeta de la papelera ! Una vez eliminados, los archivos no se pueden recuperar.
(Tomado de "¿Ruta demasiado larga? Usar Robocopy" por BVLANGEN )
PD: Me doy cuenta de que esta respuesta estaba aquí, menos didácticamente. ¿Cómo eliminar un archivo en Windows con un nombre de archivo demasiado largo? [duplicar]
Benoit agregó:
fuente
Creo que he encontrado una manera de eliminar cosas de
cmd
. Originalmente probé eldel
comando, pero eso no funcionó. Entonces lo recordérmdir
. Haciendo lo siguiente:Parece haber funcionado.
fuente
La herramienta que utilicé cuando tuve este problema fue FastCopy . Seleccioné Eliminar todo del menú desplegable, seleccioné el directorio que quería eliminar e hice clic en Eliminar todo .
FastCopy es portátil (no requiere instalación), y hay versiones de 32 bits y 64 bits disponibles.
fuente
Sin instalar software adicional, puede usar el
subst
comando para crear temporalmente un alias en un directorio con 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 comandoy luego puede eliminar
X:\folder to be deleted
en el Explorador de Windows o en el símbolo del sistema fácilmente. Para eliminar el alias de letra de unidad temporal, use el comandofuente
¡Cygwin
rm -rf
funciona bien en caminos largos!fuente
Simplemente pase de Powershell al comando ejecutando a continuación:
fuente
La solución de Dentrasi es lo que funcionó mejor para mí, pero quería publicar los pasos específicos en una respuesta de alto nivel.
fuente
Hay dos cosas que ya no se mencionan en las respuestas existentes.
Prefijo de ruta larga
La API de Windows tiene una función especial que admite nombres de ruta Unicode de hasta 32k caracteres de longitud (cada elemento tiene hasta 255 caracteres de longitud).
Esto a menudo se conoce erróneamente como nomenclatura UNC, pero no está relacionado.
El prefijo utilizado para indicarle a la API que use rutas Unicode largas es
\\?\
como en:Los nombres UNC se usan normalmente cuando se refieren a rutas en servidores remotos en el formulario
\\servername\path name\file name
. Puede combinar esto con el prefijo de ruta larga para:\\?\UNC\server\share
Tenga en cuenta que algunas aplicaciones, mal escritas pero lamentablemente bastante comunes, no admiten 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
Largo camino de apoyo
Esta es una opción que se ha agregado a las versiones recientes de Windows 10. Al momento de la escritura, no está activada de manera predeterminada, ya que requiere soporte de aplicaciones específicas. Curiosamente, PowerShell tiene soporte incorporado, por lo que habilitar esta opción permitirá que se usen rutas largas directamente en los scripts de PowerShell.
Puede activarlo a través del editor de directivas 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.
regedit.exe
.HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy Objects\{48981759-12F2-42A6-A048-028B3973495F}Machine\System\CurrentControlSet\Policies
LongPathsEnabled
.LongPathsEnabled
a1
habilitar.Cualquier aplicación con entradas de manifiesto apropiadas ahora tendrá acceso a las rutas largas estándar POSIX. Esto debería incluir las aplicaciones de la Tienda Windows.
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 investigué un poco más . Parece que ahora puede configurar la compatibilidad de nombre de archivo largo con una clave del sistema:
Sin embargo, esto solo funciona para aplicaciones que están configuradas específicamente para usarlo (requiere una entrada en el archivo manifest.xml de la aplicación).
También debe tener en cuenta que no puede usar nombres de ruta relativos con este método.
fuente
{48981759-12F2-42A6-A048-028B3973495F}Machine
parte de la ruta de registro será diferente en cada computadora, puede que no sea obvio para todosMe gusta la solución cmd. Aunque quiero compartir otra solución que incluso funciona solo en Explorer: intente acortar los nombres de las carpetas principales antes de la eliminación: los nombres más cortos acortarán la ruta. 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 bla bla
.. .. .. .. .. Archivos reales con nombres largos, también
En este caso, no puede eliminar las carpetas, tampoco puede eliminar o cambiar el nombre de los archivos. Si desea eliminar toda la estructura de la carpeta 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 solo letras:
C:\
.. Proyectos
.. .. X
.. .. .. y
.. .. .. .. z
.. .. .. .. .. Archivos reales con nombres largos, también
En mi caso, solo quería eliminar toda la carpeta con muchas subcarpetas y archivos. Entonces no me importaban los nombres de las carpetas.
fuente
La solución 7-zip funciona muy bien. Otra opción si tiene instalado git es abrir un bash shell y usar:
rm -f
(o
rm -rf
para carpetas)fuente
Git Bash Here
Sugiero Total Commander (shareware, pero sigue funcionando después del período de prueba con solo una pantalla de inicio de molesta mínima). Esa es la forma en que siempre resuelvo los problemas de nombre de archivo demasiado largos .
fuente
chkdsk
debería resolverlo.También puede eliminarlos con su nombre corto equivalente.
dir /x
te los mostrará.fuente
Creé un programa simple de Java que usa robocopy para eliminar los archivos. El frasco es ejecutable. Para una salida adicional, ejecútelo desde la línea cmd.
https://drive.google.com/file/d/0B5pSEjxJvt_1WVp1T3puSm1CNjg/view?usp=sharing
fuente
He intentado todas las otras respuestas, pero no funcionaron (al menos para mí).
¡Encontré delincuente y trabajé bastante bien y bastante rápido!
Su versión de prueba está limitada a 3 acciones / 15 días, pero se puede usar si solo desea eliminar algunas carpetas / archivos:
fuente
Directorios más grandes también está diseñado para esta tarea.
Más información en CodeProject .
fuente
Enfrenté este problema en Windows 10 y encontré esta solución fácil.
fuente
Obtuve la respuesta perfecta aquí (para archivos). Funciona en Windows 10.
Ver también: https://msdn.microsoft.com/en-us/library/aa365247.aspx#maxpath
Ni una sola respuesta alternativa en 4 preguntas fue suficiente para mis necesidades. De nada mundo.
fuente
Finalmente descubrí cómo hacer esto a través de Powershell. Estas son las instrucciones que seguí para que esto funcione en Windows 7:
Cree una nueva carpeta llamada NTFSSecurity en la carpeta C: \ Users \ XXXX \ Documents \ WindowsPowerShell \ Modules \ NTFSSecurity , donde XXXX es su nombre de usuario de Windows. Ejemplo: si mi nombre de usuario era " aspnyc ", la nueva carpeta sería C: \ Users \ aspnyc \ Documents \ WindowsPowerShell \ Modules \ NTFSSecurity .
Descargue el paquete del módulo PowerShell del sistema de archivos de seguridad : debe estar disponible como un simple archivo ZIP.
fuente
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:
fuente
Si tiene instalado Bash en Ubuntu en Windows, puede ingresar al directorio principal en un símbolo del sistema normal y luego escribir:
Lo que inicia bash, elimina recursivamente el directorio de Linux donde no hay restricciones de nombre de archivo, y luego vuelve a su símbolo del sistema regular.
fuente
Navegue al directorio en WinRAR, seleccione el archivo, presione F2, cambie el nombre del archivo a un nombre más corto. Luego puede eliminar el archivo como de costumbre.
Fuente: https://www.youtube.com/watch?v=qQTyTprFAOg
fuente