Ce problème est en fait assez simple à résoudre. Disons que la structure du répertoire est la suivante :
C:\Dir1\Dir1\Dir1\Dir1…
Pour y remédier, il suffit de renommer chaque dossier en un nom de dossier à un caractère jusqu'à ce qu'il ne soit plus trop long à supprimer :
- Renommer
C:\Dir1
a C:\D
- Naviguez vers
C:\D\
- Renommer
C:\D\Dir1
a C:\D\D
- Naviguez vers
C:\D\D\
- Goto 1 jusqu'à ce que la longueur totale du chemin soit <260
Voici un fichier batch pour automatiser le processus (cette version simple est la meilleure pour les répertoires simples comme celui décrit dans la question, surtout pour les répertoires jetables). Passez-lui le dossier le plus élevé possible (par exemple C:\Dir1
para C:\Dir1\Dir1\Dir1…
o 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 à l'envers ; on ne peut pas régler le problème en partant du répertoire le plus intime vers l'extérieur, il faut 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 telle que C:\Dir1\Dir1\Dir1\Dir1
la longueur de la trajectoire jusqu'à l'élément le plus à l'intérieur. Dir1
est de 22. Cependant, la longueur du chemin jusqu'à l'endroit le plus extérieur Dir1
n'est que de 7, et reste donc accessible quel que soit son contenu (dans le contexte du chemin d'accès d'un répertoire donné, le système de fichiers n'a aucune connaissance de ce qu'il contient ou de l'effet qu'il a sur la longueur totale du chemin d'accès de ses répertoires enfants ; seuls ses répertoires ancêtres - vous ne pouvez pas renommer un répertoire si la longueur totale du chemin d'accès est trop longue).
Par conséquent, lorsque vous rencontrez un chemin trop long, ce que vous devez faire, c'est aller au niveau le plus élevé possible et le renommer en un nom à un caractère, puis répéter l'opération pour chaque niveau. À chaque fois, la longueur totale du chemin est réduite de la différence entre l'ancien et le nouveau nom.
L'inverse est également vrai. Vous ne pouvez pas créer un chemin d'accès dont la longueur est supérieure à la longueur maximale prise en charge (sous DOS et Windows, MAX_PATH = 260
). Cependant, vous pouvez renommer les répertoires, en partant du plus profond vers l'extérieur, avec un nom plus long. Le résultat est que les dossiers plus profonds dont le chemin absolu est >260 seront inaccessibles. (Cela ne les rend pas "cachés" ou sécurisés, car ils sont assez simples à atteindre, donc n'utilisez pas cette méthode pour cacher des fichiers).
Note latérale intéressante
Si vous créez des dossiers dans l'Explorateur de Windows 7, il peut sembler que l'Explorateur vous permette de créer des sous-répertoires de telle sorte que la longueur totale soit plus longue que MAX_PATH
Cependant, il s'agit en fait de tricher en utilisant les "noms de fichiers DOS 8.3". Vous pouvez le constater en créant une arborescence telle que la suivante :
C:\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\
Il comporte 696 caractères, ce qui est bien sûr beaucoup plus long que 260. De plus, si vous naviguez vers le sous-répertoire le plus proche dans l'Explorateur, il l'affiche comme prévu dans la barre d'adresse lorsqu'il n'est pas en focus, mais lorsque vous cliquez dans la barre d'adresse, il change le chemin d'accès en 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.
Dans XP, il ne le fait pas, mais refuse obstinément de créer un chemin plus long que celui qui est pris en charge.
Ce qui serait vraiment intéressant, c'est de savoir comment l'Explorateur de Windows 7 gère les "chemins trop longs" lorsque l'option NtfsDisable8dot3NameCreation
est définie.