Isso é realmente simples de corrigir. Digamos que a estrutura de diretórios seja assim:
C:\Dir1\Dir1\Dir1\Dir1…
Para corrigir isso, basta renomear cada pasta para um nome de pasta de um caractere até que não seja mais longo excluir:
- Renomear
C:\Dir1
para C:\D
- Navegue até
C:\D\
- Renomear
C:\D\Dir1
para C:\D\D
- Navegue até
C:\D\D\
- Ir até 1 até o comprimento total do caminho ser < 260
Veja um arquivo em lote para automatizar o processo (essa 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 estão para trás; você não pode consertá-lo indo do diretório mais interno para fora, você precisa ir na outra direção.
Quando você tenta acessar um diretório, você o faz usando seu caminho absoluto, explicitamente ou nã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 inner Dir1
é 22. No entanto, o comprimento do caminho para o outer Dir1
é apenas 7 e, portanto, ainda é acessível independentemente de 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 no comprimento total do caminho de seus diretórios filhos; somente seus diretórios ancestrais - você não pode renomear um diretório se o caminho total -length será muito longo).
Portanto, quando você encontrar um caminho que é 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 oposto também é verdadeiro. Você não pode criar um caminho que seja maior que o comprimento máximo suportado (no DOS e no Windows, MAX_PATH = 260
). No entanto, você pode renomear diretórios, trabalhando do mais interno para fora, 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" nem seguros, pois são simples o suficiente para chegar, portanto, não use esse método para ocultar arquivos.)
Nota Interessante
Se você criar pastas no Windows 7 Explorer, pode parecer que o Explorer permite criar subdiretórios de modo que o comprimento total seja maior que MAX_PATH
e, na verdade, é, no entanto, é trapacear usando “DOS 8.3 nomes de arquivos ”. 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 do que 260. Além disso, se você navegar para o subdiretório mais interno no Explorer, ele será exibido como esperado na barra de endereço quando não estiver em foco, mas quando você clicar na barra de endereço, ele 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, em vez disso, recusa-se 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 opção NtfsDisable8dot3NameCreation
está definida.