2K
La mayoría de las aplicaciones de Windows devuelven el error. Ruta de destino demasiado larga si la longitud total de la ruta del archivo excede los 260 caracteres cuando intenta copiar, mover, cambiar el nombre, crear o editar dicho archivo. En este artículo, veremos algunos trucos que pueden ayudarle a administrar rutas de archivos largas fácilmente en Windows.
Limitaciones de la longitud máxima de la ruta del archivo en Windows
El límite de 260 caracteres para la ruta completa del archivo no es una limitación del sistema de archivos NTFS, sino de la biblioteca API Win32. La API de Windows siempre comprueba si la ruta es más larga que el límite MAX_PATH cuando intentas acceder a un archivo.
Cuando utiliza las funciones de la API Unicode, es posible utilizar una ruta de hasta 32767 caracteres de longitud. Esto permite que muchas aplicaciones de terceros (como los populares administradores de archivos, por ejemplo FAR y Total Commander) manejen archivos/carpetas cuyas rutas superen los 256 caracteres.
Nota. Algunos programas utilizan el formato de ruta de archivo UNC (con el prefijo “?”) para evitar las limitaciones de la API de Win32. Por ejemplo, la ruta absoluta del archivo podría verse así:
\\?\C:\folder1\subfolder1\toolongfilename
Debido a las limitaciones de la longitud máxima de la ruta, el administrador puede encontrar los siguientes problemas:
- Los usuarios pueden crear archivos y carpetas en una carpeta de red compartida a la que el administrador no puede acceder localmente;
- Errores al sincronizar perfiles móviles;
- Errores en la recuperación de datos de instantáneas;
- Cálculo incorrecto del tamaño de los directorios;
- Pérdida de archivos durante la migración, transferencia de datos entre servidores, etc.
Cómo arreglar la ruta de destino demasiado larga en Windows
En nuestro caso, cuando intentamos mover el archivo a un directorio local en una computadora con Windows 10, recibimos el siguiente mensaje:
Ruta de destino demasiado larga
Los nombres de los archivos serían demasiado largos para la carpeta de destino. Puede acortar el nombre del archivo e intentarlo nuevamente, o probar con una ubicación que tenga una ruta más corta.
O:
Un error inesperado le impide copiar el archivo.
Error 0x80010135: ruta demasiado larga
A continuación, veremos algunas formas de resolver o solucionar la restricción de rutas de archivos largas de Windows.
Solución 1. Cambie el nombre de la carpeta principal para reducir la longitud total de la ruta del archivo
La forma más sencilla es acortar el nombre de las carpetas principales, reduciendo la longitud total de la ruta simplemente cambiándoles el nombre. Esta solución alternativa no siempre es aplicable.
Solución 2. Cree un enlace simbólico
Otra opción es crear un enlace simbólico a parte del camino. Esto acortará la longitud total de la ruta del archivo.
Para crear un enlace simbólico a una carpeta con una ruta larga, puede utilizar el siguiente comando:
mklink /d c:\homelink “C:\verylongpathhere……”
Ahora puede realizar todas las operaciones de archivos (mover, cambiar nombre) en el directorio al que está asignado el enlace simbólico (c:\homelink en nuestro caso). No hay restricciones en la longitud máxima de la ruta cuando realiza operaciones de archivos en el directorio de enlace simbólico.
Solución 3. Utilice el comando SUBST para superar la longitud máxima de ruta
Otra opción es asignar la carpeta problemática a un disco virtual (en nuestro ejemplo, Z:), usando la utilidad incorporada substituto. Por lo tanto, también puedes acortar la longitud del camino:
Subst Z: “C:\verylongpathhere……”
Ahora puedes trabajar con los datos en el disco. Z:, donde la ruta del archivo no excede el límite de ruta de la API de Win32. Cuando finalice el trabajo, puede eliminar el disco virtual usando Subst con la opción /d:
Subst Z: /d
Solución 4. Evite rutas de archivos largas asignando una carpeta a una letra de unidad
Si simplemente necesita copiar/mover muchas carpetas de un lugar a otro, puede asignar la carpeta con la ruta larga a una letra de unidad.
- Debes abrir la carpeta de destino por su ruta UNC. Debe explorar la carpeta del problema utilizando la ruta UNC. Puede ser la ruta a un recurso compartido SMB, la ruta a un recurso compartido administrativo disponible en cualquier computadora con Windows (por ejemplo, \\servername\d$\users\your_long_path…) o el formato de nombre de archivo NT (\\?\ d:\usuarios\longpath). Copie la ruta de la carpeta al portapapeles;
Nota. El prefijo “\\?\” le indica a Windows que detenga el análisis de la cadena de ruta y envíe la ruta después del prefijo directamente al controlador del sistema de archivos. En este caso, puede omitir las restricciones de la API de Windows y exceder el MAX_PATH límites.
- Abra el Explorador de archivos y seleccione Esta PC. Haga clic en el botón Map Network Drive y seleccione Unidad de red;
- Pegue la ruta larga de su carpeta, seleccione la letra de unidad que desee asignar y presione Finalizar;
- Ahora puede copiar los archivos/carpetas a esta ubicación sin error.
Solución 5. Habilite la ruta larga de Win32 en Windows mediante la política de grupo
A partir de Windows 10 versión 1607, puede desactivar el límite MAX_PATH para las aplicaciones manifestadas de Win32 y de la Tienda Windows. La compatibilidad con rutas largas está deshabilitada de forma predeterminada en Windows y se puede habilitar usando el editor de GPO.
Abra el Editor de políticas de grupo local (Win + R > gpedit.msc > Aceptar). Vaya a la siguiente sección de GPO en el editor de políticas de grupo: Configuración del equipo > Plantillas administrativas > Sistema > Sistema de archivos. Habilite la opción GPO Habilitar rutas largas de Win32.
También puede habilitar la compatibilidad con rutas largas directamente a través del registro. Utilizar el Regedit.exe editor para configurar el Rutas largas habilitadas parámetro de REG_DWORD en la clave de registro HKLM\SYSTEM\CurrentControlSet\ControlFileSystem con un valor 1.
Puede cambiar este parámetro de registro con el siguiente comando de PowerShell:
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem -Name LongPathsEnabled -Value 1
Reinicie la computadora para aplicar los cambios.
Habilitar rutas largas de Win32 permitirá que las aplicaciones win32 manifestadas y las aplicaciones de la Tienda Windows accedan a rutas más allá del límite normal de 260 caracteres.
Tenga en cuenta que para utilizar la ruta larga NTFS de win32, la aplicación debe desarrollarse con este parámetro habilitado. Como es habitual, esta opción se habilita a través del archivo de manifiesto de la aplicación. Si la aplicación se desarrolla con soporte de ruta larga NTFS, entonces el longPathAware El parámetro debe agregarse al archivo de manifiesto. Por ejemplo:
<application xmlns=”urn:schemas-microsoft-com:asm.v3″><windowsSettings xmlns:ws2=”http://schemas.microsoft.com/SMI/2016/WindowsSettings”>
<ws2:longPathAware>true</ws2:longPathAware>
</windowsSettings>
</application>
En Visual Studio 2019 y MSBuild 16, esto longPathAware El parámetro está habilitado de forma predeterminada.
Nos gustaría recordarle que el parámetro LongPathsEnabled le permite omitir las restricciones de longitud de ruta solo para aplicaciones de Windows que se compilaron sin el parámetro MAX_PATH. Esto significa que el Explorador de Windows no funcionará con una ruta de archivo larga, incluso si la configuración de política Win32 Long Paths está habilitada. Para administrar archivos con una ruta larga en el Explorador de archivos, debe utilizar uno de los trucos descritos anteriormente.
El GPO de rutas largas de Win32 no funciona en el Explorador de archivos de Windows 10
Hay malas noticias. El Explorador de archivos, incluso en las últimas versiones de Windows 10 20H2 y Windows Server 2019, todavía no admite rutas largas NTFS. Esto significa que cuando abra dicho archivo/carpeta, seguirá recibiendo el error: «Ruta de destino demasiado larga».
El Explorador de Windows no tiene una declaración en el manifiesto y tendrás que utilizar uno de los trucos descritos en este artículo para acceder a rutas largas en Windows.
Vimos el siguiente comentario de un empleado de Microsoft:
Esta función no está lista para su inclusión en el Explorador de archivos. Debe esperar hasta que Microsoft lo active en Explorer o utilizar una herramienta de administración de archivos de terceros que sea compatible con rutas largas.
Sin embargo, en algunas aplicaciones, la verificación MAX_PATH está integrada en el código. Acerca de las restricciones de ruta máxima de archivos para desarrolladores .Net, consulte la Solución 7 a continuación.
Solución 6. Uso de la herramienta de línea de comandos Robocopy para copiar y mover archivos
Puede copiar o mover archivos, incluso con rutas que excedan los límites, utilizando la herramienta integrada de Windows en la consola. robocopia.
Por ejemplo, si no puede eliminar el directorio debido al límite de longitud de la ruta, primero puede mover datos del directorio usando robocopy:
ROBOCOPY c:\folder1\folder2\folder3\longpath\ c:\tmp\ /MOVE /E
Después de eso, puedes eliminar la carpeta fuente:
Delete c:\folder1\folder2\folder3\longpath\ /q /f
Solución 7. Ruta de archivo larga para desarrolladores .Net
La biblioteca de clases base (BCL) del entorno de desarrollo para .Net Framework tiene una verificación preliminar incorporada de la admisibilidad de nombres largos de directorios y archivos. Por lo tanto, los desarrolladores de .Net Framework pueden encontrar un error System.IO.PathTooLongException en sus programas.
Verifique la longitud de la ruta eliminada del código BCL en .Net Framework 4.6.2. Por lo tanto, después de actualizar la versión de .Net Framework, los desarrolladores pueden utilizar rutas largas en formato UNC (\\?\C:\Very_long_path). Cuando el parámetro LongPathsEnabled está habilitado en Windows 10/Windows Server 2016, es posible trabajar correctamente con archivos que tienen rutas de casi cualquier longitud.
Para hacer esto, use Net Framework 4.6.2 (y más reciente) al crear aplicaciones, o use el siguiente archivo de configuración de la aplicación para versiones anteriores de la aplicación (.Net 4.0):
<?xml version=”1.0″ encoding=”utf-8″?><configuration>
<startup>
<supportedRuntime version=”v4.0″ sku=”.NETFramework,Version=v4.0″/>
</startup>
<runtime>
<AppContextSwitchOverrides value=”Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false” />
</runtime>
</configuration>
Solución 8. Superar rutas de archivo largas en PowerShell
Para que los cmdlets Get-Item, Get-ChildItem, Remove-Item y otros de PowerShell funcionen correctamente con rutas de archivo largas, debe actualizar .NET Framework a 4.5 o posterior e instalar Windows Management Framework 5.1.
Consejo. La versión actual de PowerShell se puede encontrar en la variable $PSVersionTable.
Después de eso, cuando utilice cmdlets de archivo en lugar de Ruta, deberá utilizar el parámetro LiteralPath. Por ejemplo:
Get-ChildItem -literalpath \\?\C:\PS
Solución 9. Utilice 7-Zip para realizar operaciones de archivos con rutas de archivo largas
Para evitar la restricción MAX_PATH en Windows, puede utilizar el popular archivador 7ZIP. Instale 7-Zip, ejecute la aplicación 7zFM.exe y pegue la ruta a la carpeta del problema en la barra de direcciones.
Ahora puede realizar cualquier operación con archivos en este directorio desde la GUI del Administrador de archivos 7-Zip. 7-Zip ignora las restricciones de Win32API sobre la longitud máxima de ruta.
Notas:
- También hay una gran herramienta llamada «Herramienta de ruta larga» que funciona muy bien para solucionar este problema. Sin embargo, no es gratuito, los métodos anteriores sí lo son.
- Gracias, Colin Albright, por el comentario a continuación. Sí, también puedes usar 7-zip o cualquier utilidad zip para solucionar el problema de la ruta de destino demasiado larga. A veces, en archivos individuales, esta podría ser una solución mejor y más rápida. Simplemente cierre la carpeta y estará listo.