Имена файлов слишком длинны для помещения в эту целевую папку как исправить
в Windows API (с некоторыми исключениями, обсуждаемыми в следующих параграфах) максимальная длина пути — это максимальный _ путь, который определен как 260 символов. Локальный путь структурирован в следующем порядке: буква диска, двоеточие, обратная косая черта, имена компонентов, разделенные обратной косой чертой, и завершающий нуль-символ. Например, максимальный путь на диске D — это "D: \ часть 256-символьного пути < NUL > ", где " < NUL > " представляет невидимый завершающий нуль-символ для текущей системной кодовой страницы. (Символы < > используются для наглядности и не могут быть частью допустимой строки пути.)
Например, это ограничение может быть достигнуто при клонировании репозитория Git с длинными именами файлов в папку с длинным именем.
функции файлового ввода-вывода в Windows API преобразуют "/" в " \ " в процессе преобразования имени в имя в формате NT, за исключением случаев использования \ \ префикса "? \ ", как описано в следующих разделах.
Windows API имеет много функций, которые также имеют версии юникода, чтобы предоставить путь расширенной длины для максимальной общей длины пути в 32 767 символов. Этот тип пути состоит из компонентов, разделенных символами обратной косой черты, до значения, возвращаемого в параметре лпмаксимумкомпонентленгс функции жетволумеинформатион (обычно это значение 255 символов). Чтобы указать путь расширенной длины, используйте \ \ префикс "? \ ". Например, " \ \ ? \ D: \ очень длинный путь".
Максимальный путь в 32 767 символов приблизительный, так как префикс " \ \ ? \ " может быть расширен до более длинной строки системой во время выполнения, а это расширение применяется к общей длине.
Префикс " \ \ ? \ " также можно использовать с путями, созданными в соответствии с соглашением об универсальных именах (UNC). Чтобы указать такой путь с помощью UNC, используйте параметр " \ \ ? \ UNC- \ префикс. Например, " \ \ ? \ Общая \ папка сервера UNC \ ", где" Server "— это имя компьютера, а" Share "— имя общей папки. Эти префиксы не используются как часть самого пути. Они указывают, что путь должен быть передан в систему с минимальным изменением, что означает, что нельзя использовать косую черту для представления разделителей пути или точку для представления текущего каталога или двойные точки для представления родительского каталога. Поскольку нельзя использовать \ \ префикс "? \ " с относительным путем, относительные пути всегда ограничены максимальным числом символов _ пути .
нет необходимости выполнять нормализацию юникода в строках пути и имени файла для использования в Windows функциях API-интерфейса файлового ввода/вывода, так как файловая система обрабатывает путь и имена файлов как непрозрачную последовательность WCHAR. любые нормализации, необходимые приложению, должны выполняться с учетом того, что внешние вызовы связанных функций API-интерфейса Windows файлового ввода/вывода.
При использовании API для создания каталога указанный путь не может быть настолько длинным, что нельзя добавить имя файла 8,3 (т. е. имя каталога не может превышать максимальный _ путь минус 12).
Оболочка и файловая система имеют разные требования. можно создать путь с Windows API, который пользовательский интерфейс оболочки не может интерпретировать правильно.
включение длинных путей в Windows 10, версии 1607 и более поздних
Windows 10 начиная с версии 1607, ограничения по максимальному _ пути были удалены из общих функций файлов и каталогов Win32. Однако необходимо явно принять участие в новом поведении.
Чтобы обеспечить новое поведение при полном пути, должны выполняться оба следующих условия.
- Раздел реестра Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled (Type: REG_DWORD) должен существовать и иметь значение 1. Значение ключа будет кэшироваться системой (на процесс) после первого вызова затронутого файла или функции каталога Win32 (см. ниже для списка функций). Этот раздел реестра не будет перезагружен в течение времени существования процесса. Чтобы все приложения в системе могли распознать значение ключа, может потребоваться перезагрузка, так как некоторые процессы могли быть запущены до установки ключа.
Можно также скопировать этот код в .reg файл, который может задать это значение, или использовать команду PowerShell из окна терминала с повышенными привилегиями:
Этот раздел реестра можно также контролировать с помощью групповая политика по адресу Computer Configuration > Administrative Templates > System > Filesystem > Enable Win32 long paths .
Манифест приложения также должен содержать longPathAware элемент.
Это функции управления каталогом, которые больше не имеют ограничений на Максимальное число _ путей , если вы явно хотите использовать режим длинного пути: Креатедиректорив, Креатедиректорексв жеткуррентдиректорив ремоведиректорив сеткуррентдиректорив.
Это функции управления файлами, которые больше не имеют ограничений на максимальную длину _ пути , если вы явно задействуете поведение пути: копифилев, CopyFile2, копифиликсв, креатефилев, CreateFile2, креатехардлинкв, креатесимболиклинкв, делетефилев, FindFirstFileW, FindFirstFileExW, FindNextFileW, GetFileAttributesW, GetFileAttributesExW, SetFileAttributesW, GetFullPathNameW, GetLongPathNameW, MoveFileW, MoveFileExW, MoveFileWithProgressW, ReplaceFileW, SearchPathW, FindFirstFileNameW, FindNextFileNameW.
Если вы когда-либо видели эту проблему, это, вероятно, было простым решением для вас. Если вы видели эту ошибку более двух раз, то вы также знаете, что иногда это может быть сложной проблемой.
Будем надеяться, что вы столкнетесь только с набором легких исправлений, но мы подготовим вас к менее простым, гарантированно исправным исправлениям.
Почему длина имени файла является проблемой в Windows?
Существует большая история длины файлов, что является проблемой для операционных систем, таких как Windows. Было время, когда вы не могли иметь имена файлов длиннее 8 символов плюс 3-символьное расширение файла. Лучшее, что вы могли сделать, это что-то вроде myresume.doc. Это было ограничение в отношении дизайна файловой системы.
Все стало лучше, когда вышли новые версии Windows. Мы перешли от старой ограниченной файловой системы к так называемой файловой системе новой технологии (NTFS). NTFS привела нас к тому, что имя файла может быть длиной 255 символов, а длина пути к файлу потенциально может достигать 32 767 символов. Так как же мы можем иметь слишком длинные имена файлов?
Будучи переменной, вы думаете, мы могли бы изменить это. Нет, мы не должны. Это все равно что выдернуть нитку из свитера. Как только одна системная переменная изменяется, другие системные переменные и зависимые от них компоненты начинают распадаться.
Настройка Windows 10 на обработку длинных путей к файлам
Если вы знаете, что будете часто использовать длинные пути к файлам и длинные имена файлов, вам будет проще заставить Windows работать. Нет смысла использовать PowerShell для выполнения работы каждый день.
Параметры для Windows 10 Home
Чтобы Windows 10 Home принимала длинные пути к файлам, нам нужно открыть редактор реестра . Если вы раньше не работали в редакторе реестра, будьте осторожны. Случайное удаление или изменение здесь может помешать работе Windows полностью.
Всегда делайте резервную копию вашего реестра, прежде чем вносить какие-либо изменения. Узнайте все, что вам нужно знать об этом, в нашем окончательном руководстве по резервному копированию и восстановлению реестра Windows.
Открыв редактор реестра и сделав резервную копию, перейдите в папку HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem и найдите ключ LongPathsEnabled.
Дважды щелкните LongPathsEnabled. Убедитесь, что в поле Значение данные: номер 1 указан. Нажмите OK, чтобы подтвердить изменения.
Выйдите из редактора реестра, и теперь вы сможете работать с безумными длинными путями к файлам.
Параметры для Windows 10 Pro или Enterprise
Чтобы позволить Windows 10 Pro или Enterprise использовать длинные пути к файлам, мы будем использовать редактор локальной групповой политики. Это инструмент, который позволяет нам устанавливать политики в отношении работы Windows на компьютере и на уровне пользователей.
Откройте редактор групповой политики, перейдя в меню «Пуск» и набрав gpedit . Лучший результат должен быть Изменить групповую политику. Дважды щелкните по этому.
После открытия редактора групповой политики перейдите к Конфигурация компьютера → Административные шаблоны → Система → Файловая система. Там вы увидите политику включения длинных путей Win32.
Дважды щелкните по нему, чтобы изменить параметр политики. Измените его с «Отключено» на «Включено», затем нажмите кнопку «ОК», чтобы зафиксировать изменение.
Политика может не вступить в силу сразу. Вы можете принудительно обновить групповую политику.
Легкое Исправление
Если вам повезет, вы получите ошибку и точно знаете, какое имя файла вызывает проблему. Или, по крайней мере, где найти файл. Может быть, у вас есть имя файла, которое выглядит примерно так:
Понятно, кто в этом случае виновник. Найдите файл в проводнике Windows или в проводнике, как он называется в Windows 10, нажмите один раз на него, нажмите F2, чтобы переименовать его, и измените это глупое имя файла на более разумное. Задача решена.
Менее простые исправления
Не всегда легко решить эту проблему. Иногда вы не можете изменить имена файлов или каталогов по любой причине.
Следующие решения помогут вам. Их несложно сделать.
Обратите внимание, что слова каталог и папка являются взаимозаменяемыми. Мы будем использовать «каталог» в будущем. Следующие командлеты PowerShell также можно использовать для файлов.
Возможно, путь к файлу выглядит примерно так:
Этот путь к файлу составляет 280 символов. Поэтому мы не можем скопировать каталог оттуда куда-либо еще с помощью обычного метода копирования-вставки. Мы получаем ошибку Destination Path Too Long.
Давайте предположим, что по какой-то причине мы не можем переименовать каталоги, в которые вложен файл. Что мы делаем?
Каталог с именем This находится в каталоге Documents. Чтобы перейти в каталог Documents, мы используем команду cd Documents .
Вы увидите быстрое изменение текущего каталога на C:\Users\guymc\Documents. Это хорошо. Мы работаем ближе к каталогам, которые облегчат жизнь.
Копирование каталога с использованием Copy-Item
Мы хотим скопировать каталог This и его содержимое в ThatNewFolder. Давайте используем команду PowerShell Copy-Item с параметрами -Destination и -Recurse.
-Destination сообщает PowerShell, где мы хотим, чтобы копия находилась. -Recurse говорит PowerShell скопировать все элементы внутри к месту назначения. Копирование оставляет оригиналы там, где они есть, и делает все новые в месте назначения.
Переместить каталог с помощью Move-Item
Допустим, мы хотим переместить каталог This, а также все каталоги и файлы в нем, в ThatNewFolder. Перемещение не оставляет оригинал на месте.
Мы можем использовать команду PowerShell Move-Item с параметрами -Path и -Destination. -Path определяет элемент, который мы хотим переместить, и -Destination сообщает PowerShell, где мы хотим его получить.
Команда поместит это в ThatNewFolder. Он также будет перемещать все, что находится внутри этого каталога. Move-Item может использоваться для перемещения файлов или каталогов, и он работает независимо от пути к файлу или длины имени файла.
Чтобы убедиться, что это работает, используйте команду cd ThatNewFolder , чтобы войти в ThatNewFolder. Затем используйте команду dir для вывода списка каталогов в ThatNewFolder. Вы увидите, что этот каталог находится там.
Удалить каталог с помощью Remove-Item
Если мы хотим удалить этот каталог и все в нем, мы используем команду Remove-Item.
Командлет Remove-Item обладает некоторой встроенной безопасностью, которая затрудняет удаление каталога с содержимым внутри него. В нашем примере мы знаем, что хотим удалить все, поэтому мы будем использовать параметры -Recurse, чтобы заставить его удалять все внутри, и -Force, чтобы он делал это, не спрашивая нас, уверены ли мы в каждом элементе внутри.
Имейте в виду! Восстановить что-либо удаленное таким образом было бы чрезвычайно сложно.
Вы можете снова использовать команду dir, чтобы убедиться, что она пропала.
Вот и все
Если вы когда-либо видели эту проблему, это, вероятно, было простым решением для вас. Если вы видели эту ошибку более двух раз, то вы также знаете, что иногда это может быть сложной проблемой.
Будем надеяться, что вы столкнетесь только с набором легких исправлений, но мы подготовим вас к менее легким, гарантированно исправным исправлениям.
Почему длина имени файла даже проблема в Windows?
Существует длинная история длин файлов, что является проблемой для операционных систем, таких как Windows. Было время, когда вы не могли иметь имена файлов длиннее 8 символов плюс 3-символьное расширение файла. Лучшее, что вы могли сделать, это что-то вроде myresume.doc. Это было ограничение в отношении дизайна файловой системы.
Все стало лучше, когда вышли новые версии Windows. Мы перешли от старой ограниченной файловой системы к так называемой файловой системе новой технологии (NTFS). NTFS привела нас к тому, что имя файла может быть длиной 255 символов, а длина пути к файлу потенциально может достигать 32 767 символов. Так как же мы можем иметь слишком длинные имена файлов?
Будучи переменной, вы думаете, мы могли бы изменить это. Нет, мы не должны. Это все равно что выдернуть нитку из свитера. Как только одна системная переменная изменяется, другие системные переменные и зависимые от них компоненты начинают распадаться.
Как мы это исправим?
Легкое Исправление
Если вам повезет, вы получите ошибку и точно знаете, какое имя файла вызывает проблему. Или, по крайней мере, где найти файл. Может быть, у вас есть имя файла, которое выглядит примерно так:
C: User guymc Documents Мои резюме резюме с именами на долгие годы, когда возникают проблемы, и они становятся частью нашего творчества.
Понятно, кто в этом случае преступник. Найдите файл в проводнике Windows или в проводнике, как он вызывается в Windows 10, нажмите один раз на него, нажмите F2, чтобы переименовать его, и измените это глупое имя файла на более разумное. Задача решена.
Менее простые исправления
Не всегда легко решить эту проблему. Иногда вы не можете изменить имена файлов или каталогов по какой-либо причине.
Следующие решения помогут вам. Их не сложно сделать.
Перемещение, удаление или копирование файлов или каталогов с помощью PowerShell
Обратите внимание, что слова каталог и папка являются взаимозаменяемыми. Мы будем использовать «каталог» в будущем. Следующие командлеты PowerShell также можно использовать для файлов.
Возможно, путь к файлу выглядит примерно так:
C: Users guymc Documents Это Is Точно Параметр Precise Directory Путь Это I Потребность К Have К Keep My Files Рассортировано В А Маннер Это ДАЕТ Sense К Me Так Lets Притворись В этом Is An Actual Filepath что вы Might Также Have на Ваш Windows компьютер А не Over Think It Document.docx
Этот путь к файлу составляет 280 символов. Поэтому мы не можем скопировать каталог оттуда куда-либо еще с помощью обычного метода копирования-вставки. Мы получаем ошибку Destination Path Too Long.
Давайте предположим, что по какой-то причине мы не можем переименовать каталоги, в которые вложен файл. Что мы делаем?
Каталог с именем This находится внутри каталога Documents. Чтобы перейти в каталог Documents, мы используем команду DOS cd Documents.
Вы увидите быстрое изменение C: Users guymc Documents. Это хорошо. Мы работаем ближе к каталогам, которые облегчат жизнь.
Копирование каталога с использованием Copy-Item
Мы хотим скопировать каталог This и его содержимое в ThatNewFolder. Давайте используем командлет PowerShell Copy-Item с параметрами -Destination и -Recurse.
-Предназначение сообщает PowerShell, где мы хотим, чтобы копия находилась. -Рекурс говорит PowerShell скопировать все элементы внутри к месту назначения. Копирование оставляет оригиналы там, где они есть, и делает все новые в месте назначения.
Copy-Item This -Destination ThatNewFolder -Recurse
Переместить каталог с помощью Move-Item
Допустим, мы хотим переместить каталог This, а также все каталоги и файлы в нем в ThatNewFolder. Перемещение не оставляет оригинал на месте.
Мы можем использовать командлет PowerShell Move-Item с параметрами -Path и -Destination. -Path определяет элемент, который мы хотим переместить, и -Destination сообщает PowerShell, где мы хотим его получить.
Командлет поместит это в ThatNewFolder. Он также будет перемещать все, что находится внутри этого каталога. Move-Item может использоваться для перемещения файлов или каталогов, и он работает независимо от пути к файлу или длины имени файла.
Move-Item -Path This -Destination ThatNewFolder
Чтобы убедиться, что это работает, используйте команду cd ThatNewFolder, чтобы войти в ThatNewFolder. Затем используйте команду dir для вывода списка каталогов в ThatNewFolder. Вы увидите, что этот каталог находится там.
Удалить каталог с помощью Remove-Item
Если мы хотим удалить этот каталог и все в нем, мы используем командлет Remove-Item.
Командлет Remove-Item обладает некоторой встроенной безопасностью, которая затрудняет удаление каталога с содержимым внутри него. В нашем примере мы знаем, что хотим удалить все, поэтому мы будем использовать параметры -Recurse, чтобы заставить его удалять все внутри, и -Force, чтобы он делал это, не спрашивая нас, уверены ли мы в каждом элементе внутри.
Имейте в виду! Восстановить что-либо удаленное таким образом было бы чрезвычайно сложно. Вы можете попробовать методы в Как восстановить случайно удаленные файлы, но не ожидайте многого.
Remove-Item This -Recurse -Force
Вы можете снова использовать команду dir, чтобы убедиться, что она пропала.
Заставьте Windows 10 принимать длинные пути к файлам
Если вы знаете, что будете часто использовать длинные пути к файлам и длинные имена файлов, вам будет проще заставить Windows работать. Нет смысла использовать PowerShell для выполнения работы каждый день.
Заставьте Windows 10 Home принимать длинные пути к файлам
Чтобы Windows 10 Home принимала длинные пути к файлам, нам нужно открыть редактор реестра. Если вы раньше не работали в редакторе реестра, будьте осторожны. Случайное удаление или изменение здесь может помешать работе Windows полностью.
Всегда делайте резервную копию вашего реестра, прежде чем вносить какие-либо изменения. Узнайте все, что вам нужно знать об этом в нашем Руководство по резервному копированию и восстановлению реестра Windows,
После открытия редактора реестра и создания резервной копии перейдите в папку HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Control FileSystem и найдите ключ LongPathsEnabled.
Дважды щелкните LongPathsEnabled. Убедитесь, что в поле Значение данные: номер 1 указан. Нажмите OK, чтобы подтвердить изменения.
Выйдите из редактора реестра, и теперь вы сможете работать с безумными длинными путями к файлам.
Заставьте Windows 10 Pro или Enterprise принимать длинные пути к файлам
Чтобы позволить Windows 10 Pro или Enterprise использовать длинные пути к файлам, мы собираемся использовать редактор групповой политики. Это инструмент, который позволяет нам устанавливать политики в отношении работы Windows на компьютере и на уровне пользователей.
Откройте редактор групповой политики, перейдя в меню «Пуск» и введя gpedit. Лучший результат должен быть Изменить групповую политику. Дважды щелкните по этому.
После открытия редактора групповой политики перейдите к Конфигурация компьютера> Административные шаблоны> Система> Файловая система. Там вы увидите политику «Включить длинные пути Win32».
Дважды щелкните по нему, чтобы изменить параметр политики. Измените его с «Отключено» на «Включено», затем нажмите кнопку «ОК» для подтверждения изменения.
Политика может не вступить в силу сразу. Вы можете принудительно обновить групповую политику.
Это оно
При попытке скопировать, переместить и удалить файлы или папки система может заблокировать это действие ошибкой «слишком длинный целевой путь». Она возникает по причине того, что Windows имеет ограничение на длину пути, число символов в котором не должно превышать 260 символов.
Проблема возникает на уровне вложенности приложений и не связана с ограничением NTFS. В этом случае количество символом ограничивается библиотекой Win32 API. Поэтому большинство стандартных приложений, включая проводник Windows, не будут обрабатывать объекты, длина пути к которым превышает 260 символов.
Переименование расширений
Если ошибка возникает при перемещении архивных файлов Zip или Rar, попробуйте временно переименовать их в формат «txt» и после переноса вернуть обратно.
Для этого щелкните правой кнопкой мыши на архив и выберите «Переименовать». Затем измените расширение на «txt».
Примечание: Если по умолчанию в проводнике не отображаются типы расширений, на вкладке Вид отметьте флажком поле, связанное с расширением имен.
После перемещения файла, верните ему первоначальное расширение (zip или rar).
Если этим способом не удалось переместить архивы по причине слишком длинного целевого пути, перейдите к следующему решению.
Удаление с помощью утилиты DeleteLongPath
Если нужно удалить папку, которая вложена по слишком длинному пути, попробуйте сделать это с помощью бесплатной утилиты DeleteLongPath. Она предназначена для удаления структуры папок и всех содержащихся в ней вложенных объектов.
Сделайте запрос в интернете «DeleteLongPath» и перейдите на указанный сайт.
После загрузки извлеките файл из zip-архива и откройте.
Кликните на кнопку «Обзор», чтобы указать расположение папки, и нажмите на «Удалить». В следующем окне подтвердите действие, и дождитесь завершения удаления.
Включение поддержки для работы с глубоко вложенными объектами
В Windows 10 (сборка 1607 и выше) есть возможность отключить ограничение MAX_PATH на системном уровне. Выполните следующие шаги.
Откройте Редактор реестра командой regedit из окна «Выполнить» (Win + R).
Раскрывая вложенную структуру на левой панели, перейдите в следующий раздел:
HKEY_LOCAL_MACHINE – SYSTEM – CurrentControlSet – Control – FileSystem
В разделе FileSystem дважды кликните на параметре LongPathsEnabled, чтобы перейти в его установки.
В поле «Значение» установите «1» и примените изменения на «ОК».
Закройте Редактор реестра и попробуйте выполнить действия с папками, которые не удавались из-за ошибки слишком длинного целевого пути.
Использование команды xcopy
Если по-прежнему не удается скопировать папку, целевой путь к которой слишком длинный, попробуйте это сделать с помощью команды xcopy, запущенной из командной строки с правами администратора.
Запустите командную строку от имени администратора с помощью системного поиска.
Читайте также: