Это на самом деле довольно просто исправить. Скажем, что структура каталогов такова:
C:\Dir1\Dir1\Dir1\Dir1…
Чтобы исправить это, просто переименуйте каждую папку в одно-символьное имя папки, пока она не станет слишком длинной для удаления:
- Переименуйте
C:\Dir1
в C:\D
- Перейдите к
C:\D\
- Переименуйте
C:\D\Dir1
в C:\D\D
- Перейдите к
C:\D\D\
- Переходите к 1, пока общая длина пути не станет <260
Вот пакетный файл для автоматизации процесса (эта простая версия лучше всего подходит для простых каталогов, подобных описанным в вопросе, особенно для одноразовых). Передайте ему максимально возможную папку (например, C:\Dir1
для C:\Dir1\Dir1\Dir1…
или C:\Users\Bob\Desktop\New Folder
для 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
Техническое объяснение
Другие предлагаемые решения являются обратными; вы не можете это исправить, прокладывая путь из самого внутреннего каталога наружу, вам нужно идти в другом направлении.
Когда вы пытаетесь получить доступ к каталогу, вы делаете это, используя его абсолютный путь, явно или нет, который включает в себя все, что было до него. Следовательно, для структуры каталогов, такой как C:\Dir1\Dir1\Dir1\Dir1
, длина пути к самому внутреннему Dir1
равна 22. Однако длина пути к самому внешнему Dir1
составляет всего 7, и, следовательно, он по-прежнему доступен независимо от его содержимого (в контексте пути к указанному каталогу файловая система не знает, что она содержит, или какое влияние она оказывает на общая длина пути его дочерних каталогов; только его родительские каталоги - вы не можете переименовать каталог, если общая длина пути будет слишком большой).
Поэтому, когда вы сталкиваетесь с слишком длинным путем, вам нужно перейти на максимально возможный уровень, переименовать его в односимвольное имя и повторить для каждого уровня в нем. Каждый раз, когда вы это делаете, общая длина пути сокращается на разницу между старым именем и новым именем.
Также верно и обратное. Вы не можете создать путь, который превышает максимальную поддерживаемую длину (в DOS и Windows MAX_PATH = 260
). Тем не менее, вы можете переименовать каталоги, работая изнутри наружу, в более длинное имя. В результате более глубокие папки, абсолютный путь которых> 260, будут недоступны. (Это не делает их «скрытыми» или безопасными, поскольку к ним достаточно просто добраться, поэтому не используйте этот метод для скрытия файлов.)
Интересная сторона Примечание
Если вы создаете папки в Windows 7 Explorer, может показаться, что Explorer позволяет вам создавать подкаталоги так, чтобы общая длина была больше, чем MAX_PATH
, и в действительности это так, но на самом деле это обман, используя «DOS 8.3 filenames». Вы можете увидеть это, создав дерево, например:
C:\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\
Это 696 символов, что, конечно, намного длиннее, чем 260. Кроме того, если вы переходите к самому внутреннему подкаталогу в Проводнике, он показывает его, как и ожидалось, в адресной строке, когда он не в фокусе, но когда вы щелкаете в адресной строке, он меняет путь на C:\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\
, длина которого составляет всего 102 символа.
В XP он этого не делает, вместо этого он решительно отказывается создавать более длинный путь, чем поддерживается.
Что было бы действительно интересно, так это узнать, как Windows 7 Explorer обрабатывает «слишком длинные пути», когда установлена опция NtfsDisable8dot3NameCreation
.