Операционная система Windows имеет ограничение на длину пути к файлам и папкам в 260 символов, связанное с библиотекой Win32 API (константа MAX_PATH). Это ограничение затрагивает стандартные инструменты, такие как Проводник Windows и PowerShell, хотя файловая система NTFS поддерживает пути до 32 767 символов. В этой статье мы подробно разберем, как удалить файлы или папки с путями, превышающими 260 символов, используя UNC-пути, символические ссылки, виртуальные диски и утилиту robocopy. Мы также рассмотрим типичные ошибки и способы их обхода для успешного управления файлами на локальных и сетевых дисках.
Понимание ограничения на длину пути
Ограничение в 260 символов в Win32 API формируется следующим образом:
— C:\ — буква диска (3 символа).
— Путь до 256 символов.
— Завершающий нулевой символ (NUL).
Максимальная длина имени одного каталога или файла в NTFS составляет 255 символов в кодировке Unicode. Однако при использовании Unicode-функций API можно работать с путями до 32 767 символов, добавляя префикс \\?\ (например, \\?\C:\LongPath\File.txt). Это позволяет сторонним файловым менеджерам, таким как FAR или Total Commander, без проблем обрабатывать длинные пути.
При попытке удалить, переместить или скопировать файл с длинным путем через Проводник Windows возникает ошибка:
Имена файлов слишком длинны для помещения в эту целевую папку.
Попробуйте использовать более короткое имя файла или использовать папку с более коротким путем.
Аналогичная ошибка в PowerShell при использовании команды Remove-Item для каталога, например, C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath:
Remove-Item : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
At line:1 char:1
+ Remove-Item .\verylongpath -Recurse
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : WriteError: (C:\Install\MS S...it\verylongpath:String) [Remove-Item], PathTooLongException
+ FullyQualifiedErrorId : RemoveItemIOError,Microsoft.PowerShell.Commands.RemoveItemCommand
Методы удаления файлов с длинными путями
Ниже приведены проверенные способы обхода ограничения на длину пути для удаления файлов и папок в Windows.
Метод 1: Укорачивание пути через переименование
Самый простой способ — сократить длину пути, переименовав родительские папки:
1. Перейдите в Проводник Windows к каталогу, содержащему проблемный файл или папку.
2. Переименуйте родительские папки, чтобы общая длина пути стала менее 260 символов. Например, измените C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath на C:\Install\SQL\verylongpath.
3. Попробуйте удалить файл или папку через Проводник или команду:
Remove-Item "C:\Install\SQL\verylongpath" -Recurse -Force
Примечание: Этот метод не всегда применим, особенно если структура каталогов не подлежит изменению.
Метод 2: Использование UNC-путей
Для обхода ограничения Win32 API используйте префикс \\?\, который позволяет работать с путями до 32 767 символов:
1. Откройте Командную строку от имени администратора (Win + X -> Командная строка (администратор)).
2. Выполните команду для удаления файла или папки, добавив префикс \\?\. Например:
del "\\?\C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath"
Для удаления каталога:
rmdir "\\?\C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath" /s /q
Здесь /s — рекурсивное удаление, /q — без подтверждения.
Примечание: Убедитесь, что путь указан точно, включая пробелы и кавычки для путей с пробелами.
Метод 3: Создание символической ссылки
Символическая ссылка позволяет сократить длину пути, перенаправив доступ к папке через более короткий путь:
1. Откройте Командную строку от имени администратора.
2. Создайте символическую ссылку с помощью команды mklink:
mklink /d "C:\link" "C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath"
3. Выполните удаление через созданную ссылку:
rmdir "C:\link" /s /q
4. Удалите ссылку после завершения:
rmdir "C:\link"
Метод 4: Подключение папки как виртуального диска
Подключение проблемной папки как виртуального диска также сокращает длину пути:
1. Откройте Командную строку от имени администратора.
2. Подключите папку как виртуальный диск (например, X:):
subst X: "C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath"
3. Перейдите на диск X: и удалите содержимое:
del X:\* /s /q
rmdir X:\ /s /q
4. Отключите виртуальный диск после завершения:
subst X: /d
Метод 5: Использование robocopy для удаления
Утилита robocopy поддерживает длинные пути и может удалить содержимое папки через зеркалирование пустого каталога:
1. Создайте пустую папку, например, C:\Install\Empty:
mkdir "C:\Install\Empty"
2. Используйте robocopy с опцией /MIR для зеркалирования пустой папки в целевую:
robocopy "C:\Install\Empty" "C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath" /MIR
Опция /MIR удаляет все содержимое целевой папки, так как исходная папка пуста.
3. Удалите целевую папку:
rmdir "C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath" /s /q
4. Удалите временную папку:
rmdir "C:\Install\Empty"
Дополнительные рекомендации
— Используйте сторонние файловые менеджеры, такие как FAR Manager или Total Commander, которые поддерживают длинные пути без дополнительных настроек.
— Для сетевых папок, доступных по SMB, ограничение в 260 символов не применяется, но локальное управление через Проводник все равно может вызывать ошибки.
— В Windows 10 и новее можно отключить ограничение MAX_PATH через реестр:
1. Откройте regedit и перейдите в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem.
2. Создайте или измените параметр LongPathsEnabled (тип DWORD) и установите значение 1.
3. Перезагрузите компьютер.
Примечание: Это работает только для приложений, поддерживающих длинные пути, и не всегда решает проблему в Проводнике.
— Перед удалением создайте резервную копию данных, чтобы избежать потери важных файлов.
Проверка результата
1. Попробуйте открыть проблемный каталог в Проводнике Windows или выполнить команду dir в Командной строке, чтобы убедиться, что он удален.
2. Если каталог все еще присутствует, перепроверьте правильность путей и выполнение команд.
3. Проверьте системные журналы в Просмотре событий (eventvwr.msc) для выявления возможных ошибок.
Использование описанных методов позволяет эффективно управлять файлами и папками с длинными путями в Windows, обходя ограничения Win32 API. Если проблемы сохраняются, рассмотрите использование специализированных утилит или обратитесь в техническую поддержку Microsoft.