Esto es realmente bastante simple de arreglar. Digamos que la estructura del directorio es como tal:
C:\Dir1\Dir1\Dir1\Dir1…
Para solucionarlo, simplemente cambie el nombre de cada carpeta a un nombre de carpeta de un carácter hasta que ya no sea demasiado largo para eliminar:
- Renombrar
C:\Dir1
aC:\D
- Navegar a
C:\D\
- Renombrar
C:\D\Dir1
aC:\D\D
- Navegar a
C:\D\D\
- Pase a 1 hasta que la longitud total del camino sea <260
Aquí hay un archivo por lotes para automatizar el proceso (esta versión simple es mejor para directorios simples como el descrito en la pregunta, especialmente para los desechables). Páselo a la carpeta más alta posible (por ejemplo, C:\Dir1
para C:\Dir1\Dir1\Dir1…
o C:\Users\Bob\Desktop\New Folder
para C:\Users\Bob\Desktop\New Folder\abcdefghi…
)
@echo off
if not (%1)==() cd %1
for /D %%i in (*) do if not %%i==_ ren "%%i" _
pushd _
%0
popd
Explicación técnica
Las otras soluciones propuestas son al revés; no puede solucionarlo trabajando desde el directorio más interno hacia afuera, debe ir en la otra dirección.
Cuando intenta acceder a un directorio, lo hace utilizando su ruta absoluta, ya sea explícitamente o no, que incluye todo lo que vino antes. Por lo tanto, para una estructura de directorio como C:\Dir1\Dir1\Dir1\Dir1
, la longitud de la ruta al más interno Dir1
es 22. Sin embargo, la longitud de la ruta al más externo Dir1
es solo 7 y, por lo tanto, aún es accesible independientemente de su contenido (en el contexto de la ruta de un directorio dado , el sistema de archivos no tiene conocimiento de lo que contiene o el efecto que tiene sobre la longitud total de la ruta de sus directorios secundarios; solo sus directorios antecesores; no puede cambiar el nombre de un directorio si la longitud total de la ruta será demasiado larga).
Por lo tanto, cuando encuentre un camino que es demasiado largo, lo que debe hacer es ir al nivel más alto posible y cambiarle el nombre a un nombre de un carácter y repetirlo para cada nivel. Cada vez que lo hace, la longitud total de la ruta se acorta por la diferencia entre el nombre antiguo y el nuevo.
Lo contrario también es cierto. No puede crear una ruta que sea mayor que la longitud máxima admitida (en DOS y Windows, MAX_PATH = 260
). Sin embargo, puede cambiar el nombre de los directorios, trabajando desde lo más interno hacia afuera, a un nombre más largo. El resultado es que las carpetas más profundas cuya ruta absoluta es> 260 serán inaccesibles. (Eso no los hace "ocultos" o seguros, ya que son lo suficientemente simples como para llegar a ellos, así que no use este método para ocultar archivos).
Nota al margen interesante
Si crea carpetas en el Explorador de Windows 7, puede parecer que el Explorador le permite crear subdirectorios de modo que la longitud total sea más larga que MAX_PATH
, y en realidad lo es, sin embargo, en realidad está haciendo trampa usando "nombres de archivo DOS 8.3". Puede ver esto creando un árbol como el siguiente:
C:\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\
Tiene 696 caracteres de largo, que por supuesto es mucho más largo que 260. Además, si navega al subdirectorio más interno en Explorer, lo muestra como se espera en la barra de direcciones cuando no está enfocado, pero cuando hace clic en la dirección barra, cambia la ruta a C:\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\
, que tiene solo 102 caracteres de longitud.
En XP, no hace esto, sino que se niega firmemente a crear una ruta más larga de lo que es compatible.
Lo que sería realmente interesante es descubrir cómo el Explorador de Windows 7 maneja "rutas demasiado largas" cuando NtfsDisable8dot3NameCreation
se establece la opción.