Na verdade, isso é bastante simples de corrigir. Diga que a estrutura de diretórios é a seguinte:
C:\Dir1\Dir1\Dir1\Dir1…
Para corrigi-lo, basta renomear cada pasta para um nome de pasta com um caractere até que não seja mais longo para excluir:
- Renomeie
C:\Dir1
paraC:\D
- Navegar para
C:\D\
- Renomeie
C:\D\Dir1
paraC:\D\D
- Navegar para
C:\D\D\
- Vá para 1 até que o comprimento total do caminho seja <260
Aqui está um arquivo em lotes para automatizar o processo (esta versão simples é melhor para diretórios simples como o descrito na pergunta, especialmente para os descartáveis). Passe a pasta mais alta possível (por exemplo, C:\Dir1
para C:\Dir1\Dir1\Dir1…
ou 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
Explicação técnica
As outras soluções propostas são inversas; você não pode consertá-lo trabalhando a partir do diretório mais interno para fora; precisa seguir na outra direção.
Ao tentar acessar um diretório, você o faz usando seu caminho absoluto, explicitamente ou não, o que inclui tudo o que veio antes dele. Portanto, para uma estrutura de diretório como C:\Dir1\Dir1\Dir1\Dir1
, o comprimento do caminho para o mais interno Dir1
é 22. No entanto, o comprimento do caminho para o mais externo Dir1
é apenas 7 e, portanto, ainda é acessível, independentemente do seu conteúdo (no contexto do caminho de um determinado diretório) , o sistema de arquivos não tem conhecimento do que contém ou do efeito que tem sobre o comprimento total do caminho de seus diretórios filhos; apenas seus diretórios ancestrais - você não pode renomear um diretório se o comprimento total do caminho for muito longo).
Portanto, quando você encontra um caminho muito longo, o que você precisa fazer é ir para o nível mais alto possível e renomeá-lo para um nome de um caractere e repetir para cada nível nele. Cada vez que você faz isso, o comprimento total do caminho diminui pela diferença entre o nome antigo e o novo nome.
O contrário também é verdadeiro. Você não pode criar um caminho maior que o comprimento máximo suportado (no DOS e Windows MAX_PATH = 260
). No entanto, você pode renomear diretórios, trabalhando desde o interior até o exterior, para um nome mais longo. O resultado é que pastas mais profundas, cujo caminho absoluto é> 260, estarão inacessíveis. (Isso não os torna "ocultos" ou seguros, uma vez que são simples o suficiente para serem acessados, portanto, não use esse método para ocultar arquivos.)
Nota lateral interessante
Se você criar pastas no Windows 7 Explorer, pode parecer que o Explorer permita criar subdiretórios de forma que o comprimento total seja maior que MAX_PATH
, e na verdade é, no entanto, ele está trapaceando usando “nomes de arquivos do DOS 8.3”. Você pode ver isso criando uma árvore como a seguinte:
C:\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\
Tem 696 caracteres, o que obviamente é muito maior que 260. Além disso, se você navegar para o subdiretório mais interno do Explorer, ele será exibido conforme o esperado na barra de endereços quando não estiver em foco, mas quando você clicar no endereço barra, altera o caminho para C:\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\
, que tem apenas 102 caracteres.
No XP, ele não faz isso, mas se recusa firmemente a criar um caminho mais longo do que o suportado.
O que seria realmente interessante é descobrir como o Windows 7 Explorer lida com “caminhos muito longos” quando a NtfsDisable8dot3NameCreation
opção está definida.