C'est en fait assez simple à corriger. Dites que la structure de répertoire est en tant que telle:
C:\Dir1\Dir1\Dir1\Dir1…
Pour résoudre ce problème, il suffit de renommer chaque dossier en un nom de dossier d'un caractère jusqu'à ce qu'il ne soit plus trop long à supprimer:
- Renommer
C:\Dir1
enC:\D
- Aller vers
C:\D\
- Renommer
C:\D\Dir1
enC:\D\D
- Aller vers
C:\D\D\
- Aller à 1 jusqu'à ce que la longueur totale du chemin soit <260
Voici un fichier de commandes pour automatiser le processus (cette version simple est préférable pour des répertoires simples comme celui décrit dans la question, en particulier pour les répertoires jetables). Passez le dossier le plus haut possible (par exemple C:\Dir1
pour C:\Dir1\Dir1\Dir1…
ou C:\Users\Bob\Desktop\New Folder
pour 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
Explication technique
Les autres solutions proposées sont à rebours; vous ne pouvez pas le réparer en allant du répertoire le plus profond vers l'extérieur, vous devez aller dans l'autre sens.
Lorsque vous essayez d'accéder à un répertoire, vous le faites en utilisant son chemin absolu, explicitement ou non, qui inclut tout ce qui le précède. Par conséquent, pour une structure de répertoire semblable à C:\Dir1\Dir1\Dir1\Dir1
, la longueur du chemin d'accès au plus intérieur Dir1
est de 22. Cependant, la longueur du chemin d'accès au plus externe Dir1
n'est que de 7 et est donc toujours accessible quel que soit son contenu (dans le contexte du chemin d'un répertoire donné). , le système de fichiers n’a aucune connaissance de ce qu’il contient ni de l’effet qu’il a sur la longueur totale du chemin de ses répertoires enfants; seulement ses répertoires ancêtres (vous ne pouvez pas renommer un répertoire si la longueur totale du chemin est trop longue).
Par conséquent, lorsque vous rencontrez un chemin trop long, vous devez aller au plus haut niveau possible, le renommer en un nom à un caractère et le répéter pour chaque niveau. Chaque fois que vous le faites, la longueur totale du chemin est raccourcie de la différence entre l'ancien nom et le nouveau nom.
Le contraire est également vrai. Vous ne pouvez pas créer de chemin d'accès supérieur à la longueur maximale prise en charge (sous DOS et Windows MAX_PATH = 260
). Cependant, vous pouvez renommer les répertoires, en commençant par le plus externe, en un nom plus long. Le résultat est que les dossiers plus profonds dont le chemin d'accès absolu est> 260 seront inaccessibles. (Cela ne les rend pas "cachés" ou sécurisés, car ils sont assez simples à consulter, aussi n'utilisez pas cette méthode pour cacher des fichiers.)
Note latérale intéressante
Si vous créez des dossiers dans l'Explorateur Windows 7, il peut sembler que l'Explorateur vous autorise à créer des sous-répertoires tels que la longueur totale soit supérieure à MAX_PATH
, et en réalité, il l'est, mais il trompe en utilisant "noms de fichiers DOS 8.3". Vous pouvez le voir en créant un arbre tel que:
C:\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\
Il est long de 696 caractères, ce qui est bien sûr beaucoup plus long que 260. En outre, si vous accédez au sous-répertoire le plus à l'intérieur de l'explorateur, il s'affiche comme prévu dans la barre d'adresse lorsqu'il n'est pas activé, mais lorsque vous cliquez sur l'adresse. barre, il modifie le chemin C:\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\
, qui ne compte que 102 caractères.
Sous XP, cela n’est pas le cas, il refuse fermement de créer un chemin plus long que celui pris en charge.
Ce qui serait vraiment intéressant, c’est de découvrir comment l’Explorateur Windows 7 gère les «chemins trop longs» lorsque l’ NtfsDisable8dot3NameCreation
option est définie.