Questo è in realtà abbastanza semplice da risolvere. Supponiamo che la struttura delle directory sia tale:
C:\Dir1\Dir1\Dir1\Dir1…
Per risolverlo, basta rinominare ogni cartella con un nome cartella di un carattere fino a quando non è più troppo lungo per eliminarlo:
- Rinomina
C:\Dir1
inC:\D
- Navigare verso
C:\D\
- Rinomina
C:\D\Dir1
inC:\D\D
- Navigare verso
C:\D\D\
- Andare 1 fino a quando la lunghezza totale del percorso è <260
Ecco un file batch per automatizzare il processo (questa versione semplice è la migliore per le directory semplici come quella descritta nella domanda, specialmente per quelle usa e getta). Passalo nella cartella più alta possibile (ad es. C:\Dir1
Per C:\Dir1\Dir1\Dir1…
o C:\Users\Bob\Desktop\New Folder
per 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
Spiegazione tecnica
Le altre soluzioni proposte sono al contrario; non puoi risolverlo lavorando dalla directory più interna verso l'esterno, devi andare nella direzione opposta.
Quando si tenta di accedere a una directory, lo si fa utilizzando il suo percorso assoluto, esplicitamente o meno, che include tutto ciò che lo precede. Pertanto, per una struttura di directory simile C:\Dir1\Dir1\Dir1\Dir1
, la lunghezza del percorso verso l'interno Dir1
è 22. Tuttavia, la lunghezza del percorso verso l'esterno Dir1
è solo 7 e pertanto è ancora accessibile indipendentemente dal suo contenuto (nel contesto del percorso di una determinata directory , il file system non è a conoscenza di ciò che contiene o dell'effetto che ha sulla lunghezza totale del percorso delle sue directory figlio; solo le sue directory antenate: non è possibile rinominare una directory se la lunghezza totale del percorso sarà troppo lunga).
Pertanto, quando incontri un percorso troppo lungo, quello che devi fare è andare al livello più alto possibile e rinominarlo con un nome di un carattere e ripetere per ogni livello in esso. Ogni volta che lo fai, la lunghezza totale del percorso si accorcia della differenza tra il vecchio nome e il nuovo nome.
È vero anche il contrario. Non è possibile creare un percorso maggiore della lunghezza massima supportata (su DOS e Windows, MAX_PATH = 260
). Tuttavia, è possibile rinominare le directory, lavorando dall'interno più interno, a un nome più lungo. Il risultato è che le cartelle più profonde il cui percorso assoluto è> 260 saranno inaccessibili. (Ciò non li rende "nascosti" o sicuri, poiché sono abbastanza semplici da raggiungere, quindi non utilizzare questo metodo per nascondere i file.)
Nota laterale interessante
Se si creano cartelle in Esplora risorse di Windows 7, può sembrare che Explorer consenta di creare sottodirectory in modo tale che la lunghezza totale sia più lunga di MAX_PATH
, e in effetti lo è, tuttavia in realtà è barare usando "nomi di file DOS 8.3". Puoi vederlo creando un albero come il seguente:
C:\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\
È lunga 696 caratteri, che ovviamente è molto più lunga di 260. Inoltre, se navighi nella sottodirectory più interna in Explorer, la mostra come previsto nella barra degli indirizzi quando non è attiva, ma quando fai clic sull'indirizzo barra, cambia il percorso in C:\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\
, che è lungo solo 102 caratteri.
In XP, non lo fa, invece rifiuta fermamente di creare un percorso più lungo di quanto sia supportato.
Ciò che sarebbe davvero interessante è scoprire come Windows 7 Explorer gestisce i "percorsi troppo lunghi" quando l' NtfsDisable8dot3NameCreation
opzione è impostata.