Windows 10 path limit

Длинные пути в Windows 10

Практически каждый пользователь Windows рано или поздно сталкивается с ошибкой ″слишком длинный путь″ (path too long). Ошибка эта возникает при работе с файлами или папками, у которых полный путь превышает значение в 260 символов.

Напомню, что полный путь включает в себя букву диска, двоеточие, обратный слэш, имена компонентов (файл, директория) разделенные слешем и завершающий пустой символ (NUL). Выглядит полный путь примерно так:

Соответственно, если сумма всех компонентов пути больше 260 символов, то путь считается слишком длинным. Большинство приложений Windows не умеют работать с такими путями и при обращении к файлу\папке выдадут примерно такое сообщение:

Что интересно, значение в 260 символов обусловлено значением MAX_PATH Win32 API. У файловой системы NTFS максимальная длина пути ″немного″ больше и составляет 32767 символов. Для обхода ограничений Win32 API некоторые приложения используют формат UNC, указывая абсолютный путь с префиксом \\?\, например так:

В Windows 10 (начиная с версии 1607) появилась возможность отключить проверку MAX_PATH и использовать длинные пути без префикса \\?\ . Сделать это можно двумя способами — с помощью групповых политик или путем редактирования реестра. Мы рассмотрим оба способа, начнем с политик.

Групповые политики

Первым делом открываем редактор локальных групповых политик, для чего жмем клавиши Win+R и выполняем команду gpedit.msc.

Нужная нам политика находится в разделе Конфигурация компьютера\Административные шаблоны\Система\Файловая система (Computer configuration\Administrative templates\System\Filesystem) и называется Включить длинные пути Win32 (Enable Win32 long paths).

Для активации поддержки длинных путей надо перевести политику в состояние «Включено».

Реестр

Для включения поддержки длинных путей через реестр необходимо найти в разделе HKLM\System\CurrentControlSet\Control\FileSystem параметр с именем LongPathEnabled и задать его значение равным 1.

Эту операцию можно произвести с помощью PowerShell, командой:

Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem -Name LongPathsEnabled -Value 1

В обоих случаях потребуется перезагрузить компьютер. После перезагрузки изменения вступят в силу и для путей будет действовать только ограничение файловой системы NTFS (32767 символа), превысить которое вам навряд ли удастся. Однако это вовсе не значит, что можно расслабится. В некоторых приложениях проверка MAX_PATH заложена в коде, поэтому по возможности лучше не превышать это ограничение.

Читайте также:  Основы администрирования безопасности linux

Дополнение

Для того, чтобы пользоваться длинными путями, в приложении должна быть включена их поддержка. Если вы пишите собственное приложение, то для поддержки длинных путей в манифесте приложения надо указать следующие настройки:

А теперь о грустном. Как внезапно оказалось, в проводнике Windows поддержка длинных путей не реализована. Один из разработчиков Microsoft по этому поводу сказал примерно следующее:

″Эта функция не готова для включения в Windows Explorer. Вам нужно подождать, пока Microsoft не включит ее в Explorer, или использовать сторонний инструмент управления файлами, который совместим с длинными путями. ″

Это было сказано еще в 2016 году. Но, судя по всему, разработчики на данную проблему просто забили. На данный момент в версии 1903 проводник все так же не поддерживает длинные пути файлов. Вот так 🙁

Как мне обойти ограничения по длине переменной PATH

Эта переменная среды слишком велика. Этот диалог позволяет устанавливать значения длиной до 2047 символов.

Я использую / использовал много программного обеспечения, и в результате мой PATH вырос. Когда я пытаюсь добавить новые пути, я получаю сообщение выше. В качестве обходного пути я редактирую свой путь пользователя, но предпочитаю не делать этого.

1 ответ 1

В документации Microsoft говорится, что переменная среды в Windows ограничена только 32 767 символами (ссылка), но не говорится, как создать такую длинную переменную.

Проблема здесь в том, что инструменты, предоставляемые Windows, имеют свои ограничения:

Команды set и setx усекают значения до 1023 символов.

Установка непосредственно в реестре по адресу HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment завершается неудачно, поскольку regedit усекает введенные строки после 2047 символов.

Поэтому вы должны использовать обходные пути.

Используйте короткие имена папок

Вы можете увидеть такие имена, используя dir /x /ad . Следующий пример показывает, что на моем компьютере папка Program Files (x86) может быть заменена на PROGRA

Используйте встроенные переменные среды

Если у вас есть:

Затем вы можете создать новую переменную среды, такую как:

после чего ваши первоначальные пути становятся

Вы также можете разделить PATH на две части, создав новую переменную, скажем, NEWPATH , содержащую лишние пути и ;%NEWPATH% к переменной PATH.

Избегайте использования команды setx, поскольку она будет напрямую разрешать встроенные переменные окружения, а полученная строка снова будет слишком длинной.

Используйте скрипт PowerShell для установки PATH

PowerShell напрямую вызывает Windows API и поэтому может приблизиться к теоретическому пределу в 32 767 символов для переменной среды.

Читайте также:  Драйвер nvidia для windows 10 acer

Как отредактировать PATH в Windows 7, 8 и Windows 10?

Как запустить программу из командной строки не переходя каждый раз в папку с программой?! Как запускать сторонние программы так, как, например, программу IPCONFIG, которая не требует перехода в папку?

Что такое PATH система Windows?

Если вы скачали программу командной строки, например ADB (Android Debuggin Bridge), то вы не сможете запустить ее просто вписав adb в командной строке, как вы всегда поступали с системными командами Windows (IPCONFIG, NETSTAT и т.п.). Вместо этого вы должны будете указать командную строку содержащую полный путь к exe-файлу.

Это достаточно сложно писать в командной строке без ошибок, тем более, если вам приходится делать это достаточно часто.

PATH система Windows сообщает вашей операционной системе каталоги, в которых следует искать исполняемые файлы. Например ранее упоминаемая программа ipconfig.exe расположена в каталоге C:\Windows\System32, который в свою очередь уже добавлен в PATH Windows. При вводе команды ipconfig система обыщет все папки из PATH на наличие файла ipconfig.exe и запустит его выполнение.

Если вы хотите то же удобство с программой (в нашем примере это ADB), то приложение ADB необходимо добавить в PATH Windows и после этого для запуска достаточно будет вписать в командную строку:

Больше ничего впечатывать не придется.

Как добавить папку в PATH?

В Windows 7, 8 и Windows 10 попасть в настройки PATH можно так: Панель управления / Система / Дополнительные переменные среды.

Далее перейти в «Переменные среды».

В окне «Переменные среды» обратите внимание на переменную с именем Path. Выберите ее и нажмите «Изменить..»

Дальнейшие действия одинаковы в Windows 7 и 8, но иные, облегченные, в Windows 10.

Path в операционной системе Windows 7 и Windows 8

В этих системах переменная Path является не более, чем длинной строкой текста с адресами каталогов системы. В этот текст мы добавим каталог и с нашей программой ADB.

Для того, чтобы добавить запись с путем к исполняемому файлу в Windows 7 и 8 к тексту нужно добавить путь, которому предшествует точка с запятой, разделяющая различные записи. Например так:

Добавлять такой путь в текст path нужно только в конец строки.

После ввода нажмите ОК. Все, мы добавили каталог в patch Windows 7 и 8.

Path в операционной системе Windows 10

В операционной системе Windows 10 этот процесс проще и менее запутанный. После нажатия кнопки «Изменить…» откроется новое диалоговое окно с расположенными в отдельных строках путях path.

Читайте также:  Эмулятор среды windows для андроид

Это улучшение позволяет проще и нагляднее видеть имеющиеся пути path и облегчает добавить новые пути.

Для добавления нового пути в переменную path Windows 10 нужно нажать «Новый», добавить путь C:\Android\platform-tools и нажать ОК.

Новая запись появится в низу списка.

Теперь запуск Android Debug Bridge доступен из любого раздела командной строкой без ввода полного пути к исполняемому файлу.

How to enable paths longer than 260 characters in Windows 10

In days of yore, filenames in Windows were limited to the 8.3 format — just eight characters for the filename, and three for the extension. With the arrival of Windows 95, Microsoft stripped away this limit and allowed for much longer names.

That said, the Windows file system still imposes some restrictions such as which characters can be used in filenames, and the overall length of paths. For some time the maximum path length has been 260 characters, but in the latest Windows 10 Insider Preview, it is possible to use Group Policy or a registry hack to remove this limit.

It’s not a feature that will work with every application you have installed, but it should work with many. As Microsoft’s description of the feature explains: «Enabling NTFS long paths will allow manifested win32 applications and Windows Store applications to access paths beyond the normal 260 char limit per node. Enabling this setting will cause the long paths to be accessible within the process.»

It’s likely that this feature will be made available in Windows 10 Anniversary Update when it is released later in the year, but you can enable it in the latest Insider build using Group Policy:

  1. Hit the Windows key, type gpedit.msc and press Enter.
  2. Navigate to Local Computer Policy > Computer Configuration > Administrative Templates > System > Filesystem > NTFS.
  3. Double click the Enable NTFS long paths option and enable it.

If you’re using a version of Windows that does not provide access to Group Policy, you can edit the registry instead.

  1. Hit the Windows key, type regedit and press Enter.
  2. Navigate to HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\ CurrentVersion\Group Policy Objects\ <48981759-12f2-42a6-a048-028b3973495f>Machine\System\CurrentControlSet\Policies
  3. Select the LongPathsEnabled key, or create it as a DWORD (32-bit) value if it does not exist.
  4. Set the value to 1 and close the Registry Editor.
Оцените статью