Имя файла не должно содержать следующих знаков

Обновлено: 07.07.2024

Благодаря Anniversary Update для Windows 10 вы можете, наконец, отказаться от ограничения максимального пути в 260 символов в Windows. Вам просто нужно внести небольшие изменения в реестр Windows или групповую политику. Далее рассказано, как это сделать.

До Windows 95, операционная система Windows допускала только имена файлов длиной восемь символов с расширением файла из трёх символов, обычно называемое именем файла 8.3. Windows 95 отказалась от этого, чтобы разрешить длинные имена файлов, но по-прежнему ограничивала максимальную длину пути (которая включает полный путь к папке и имя файла) не более 260 символами. Этот предел был установлен тогда и действует до сих пор. Если вы когда-либо сталкивались с этим ограничением, скорее всего, это было, когда вы пытались скопировать папки с глубоким вложением в другие папки, например, при копировании содержимого жёсткого диска в папку на другом диске. В Windows 10 Anniversary Update наконец добавлена возможность отказаться от этой максимальной длины пути.

Есть одна оговорка. Этот новый параметр не обязательно будет работать с каждым приложением, но он будет работать с большинством. В частности, любые современные приложения должны быть в порядке, как и все 64-битные приложения. Более старые 32-битные приложения должны быть подготовлены специальным образом, что на самом деле означает, что разработчик указал в файле манифеста приложения, что приложение поддерживает более длинные пути. У большинства популярных 32-битных приложений проблем не должно быть. Тем не менее вы ничем не рискуете если выполните эту настройку. Если приложение не работает, единственное, что произойдёт, это то, что оно не сможет открывать или сохранять файлы, сохранённые в местах, где полный путь превышает 260 символов.

Windows Home: как снять ограничение в 260 символов на путь имени файла

Если у вас версия Windows Home, вам придётся отредактировать реестр Windows, чтобы внести эти изменения. Вы также можете сделать это таким образом, если у вас Windows Pro или Enterprise, но вы чувствуете себя более комфортно, работая в реестре, чем редактор групповой политики. (Однако, если у вас есть Pro или Enterprise, мы рекомендуем использовать более простой редактор групповой политики, как описано в следующем разделе.)

Стандартное предупреждение: редактор реестра является мощным инструментом, и неправильное его использование может сделать вашу систему нестабильной или даже неработоспособной. Это довольно простая настройка, и пока вы придерживаетесь инструкции, у вас не должно быть никаких проблем. Тем не менее если вы никогда не работали с реестром ОС раньше, изучите более подробно о том, как использовать редактор реестра, прежде чем приступить к работе. И обязательно сделайте резервную копию реестра (и вашего компьютера!) перед внесением изменений.

Чтобы начать, откройте редактор реестра, нажав «Пуск» и напечатав «regedit». Нажмите Enter, чтобы открыть редактор реестра и дать ему разрешение вносить изменения в свой компьютер.


В редакторе реестра используйте левую боковую панель, чтобы перейти к следующему ключу:


Справа найдите значение с именем LongPathsEnabled и дважды щёлкните его. Если вы не видите значения в списке, вам нужно создать его, щёлкнув правой кнопкой мыши по ключу FileSystem, выбрав New > DWORD (32-bit) Value, а затем присвоив имя новому значению LongPathsEnabled.


В окне свойств значения измените значение с 0 на 1 в поле «Значение» и нажмите кнопку «ОК».

Теперь вы можете закрыть редактор реестра и перезагрузить компьютер (или выйти из своей учётной записи и войти снова). Если вы хотите отменить изменения, просто вернитесь к значению LongPathsEnabled и установите его значение от 1 до 0.

Включите поддержку длинных имён файлов одним кликом

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


Эти хаки на самом деле являются просто ключом FileSystem, урезанным до значения LongPathsEnabled, которое мы описали выше, а затем экспортированным в файл .REG. Запуск хака «Remove 260 Character Path Limit.reg» устанавливает значение LongPathsEnabled равным 1. Запуск хака «Restore 260 Character Path Limit (Default).reg» устанавливает значение обратно в 0.

Windows Pro или Enterprise: как снять ограничение в 260 символов на путь имени файла с помощью редактора локальной групповой политики

Если вы используете Windows 10 Pro или Enterprise, самый простой способ отменить ограничение на длину пути файла в 260 символов это использовать редактор локальной групповой политики. Это довольно мощный инструмент, поэтому, если вы никогда не использовали его раньше, стоит потратить некоторое время на изучение того, что он может делать. Кроме того, если вы находитесь в сети компании, сделайте всем одолжение и сначала проконсультируйтесь с вашим администратором. Если ваш рабочий компьютер является частью домена, вполне вероятно, что он является частью групповой политики домена, которая в любом случае заменит локальную групповую политику.

В Windows 10 Pro или Enterprise нажмите «Пуск», введите gpedit.msc и нажмите Enter.


В редакторе локальной групповой политики в левой панели перейдите к Конфигурация компьютера > Административные шаблоны > Система > Файловая система. Справа найдите элемент «Включить длинные пути Win32» и дважды щёлкните его.


В открывшемся окне свойств выберите параметр «Включено» и нажмите «ОК».


Теперь вы можете выйти из редактора локальной групповой политики и перезагрузить компьютер (или выйти и снова войти), чтобы изменения вступили в силу. Если в любой момент вы хотите отменить изменения, просто следуйте той же процедуре и установите для этого параметра значение «Отключено» или «Не настроено».

Максимальный предел пути не является чем-то важным, что обязательно нужно изменить, но для некоторых людей это, безусловно, это ограничение было довольно досадным. Windows 10 наконец-то добавила возможность убрать это ограничение. Вам достаточно просто внести небольшие и быстрые изменения в реестр или групповую политику, чтобы это произошло.

Во времена операционной системы MS-DOS и файловой системы FAT16 существовали серьезные ограничения, касающиеся имен файлов. Так, максимальная длина имени файла составляла 8 символов, а расширения – 3 символа. С появлением Windows 95, максимальная длина имени файла увеличилась до 255 символов, и теперь нам чаще всего не приходится гадать, что скрывается в файле с названием MIAF9D

1.ZIP. В новых файловых системах FAT32 и NTFS с тех времен остались другие, менее заметные ограничения, которые можно обходить и использовать в своих целях.

Правила, касающиеся имен файлов, содержатся в так называемых «Соглашениях об именах файлов» (Filename Conventions). В этом документе описано, какие символы допустимо использовать в названиях файлов, какие символы являются разделителями пути, максимальная длина пути, и т.п. Здесь же оговариваются и ограничения. К примеру, символы “\”, “/”, “?”, “|”, “*”, “<”, “>” и “:” имеют специальное значение в Windows при операциях с файлами, в частности, из командной строки, и поэтому не могут быть использованы в имени отдельного файла. Это ограничение, по-видимому, обойти невозможно, так как при обращении к системным функциям для работы с файлами Windows стопроцентно выделяет их среди других символов и по-своему интерпретирует. Здесь нужно обратить внимание на специфическое использование символов точки «.», двоеточия «:», и пробела. Символ пробела может встречаться в имени файла или каталога, точка используется как разделитель имени файла от расширения, а двоеточие – как разделитель между буквой диска и остальной частью пути. Использование двоеточия не допускается нигде, кроме как после буквы диска, с исключением для файловой системы NTFS, где двоеточие используется еще и в качестве разделителя между нормальным именем файла и прикрепленными к нему файловыми потоками. Точка и пробел могут стоять в любом месте в имени файла, но не могут быть завершающими символами. Это странное, на первый взгляд, ограничение существует, как объясняет Microsoft, ради совместимости новых файловых систем со старыми, такими как HPFS, используемой в OS/2 и FAT16. Я думаю, что это ограничение частично связано с двумя существующими во всех используемых в Windows файловых системах виртуальными файловыми объектами (так называемые «точки»). При работе с файловыми менеджерами типа TotalCMD, для перехода в предыдущую папку надо щелкать по каталогу с названием «..». В файловых системах так обозначается родительский каталог относительно текущего пути, а текущая папка обозначается как «.». Строго говоря, эти объекты не являются настоящими файлами или каталогами. Это просто абстрактные объекты, используемые по традиции для навигации между папками. В Windows Explorer они вообще не показываются. Так как пользователь может создавать файлы, имена которых начинаются с точки (но не в Windows Explorer), то Microsoft заблокировала возможность ставить точки в конце названия, чтобы было невозможно создать файл «..». Чем мелкомягких не устраивают пробелы в конце названия, мне не понятно.

В каждой Windows системе существует эмуляция MS-DOS, и этот факт тоже накладывает свои ограничения. При работе в командной строке используются псевдонимы для устройств, работа с которыми ничем не отличается от работы с обычными файлами. Под устройства зарезервированы следующие имена файлов: AUX, CON, NUL, PRN, COM1-COM9 и LPT1-LPT9. Простейший пример работы с этими объектами: если в командной строке ввести «dir > prn | sort», то отсортированный список файлов и каталогов текущей папки начнет распечатываться из принтера. Здесь «prn» означает принтер. Понятно, что если бы существовала возможность называть файлы зарезервированными именами устройств, то возникла бы путаница, поэтому эта возможность заблокирована.

Мне известно три способа обхода описанных ограничений. Общий принцип их действия таков: определенным образом составляется название файла, после чего оно передается какой-либо системной функции для работы с файлами. В результате этого алгоритм проверки параметра на корректность не срабатывает, и мы получаем нужный результат - файл или каталог с некорректным с точки зрения системы названием. Какие это открывает возможности, я опишу позже. А пока поговорим о самих способах. Некоторые способы можно использовать не только программно, но и на пользовательском уровне. Способ первый: Использование UNC-путей. Это, на мой взгляд, самый простой и удобный способ. Разберем его на примере создания файла с точкой в конце названия. При его создании мы будем использовать стандартные функции для работы с файлами, но при этом мы будем указывать полный путь до объекта, и добавлять в начале пути четыре символа "\\?\" или "\\.\". Получится примерно следующее: "\\?\f:\test\prn". Дальше работаем с файлом как обычно, то есть мы можем писать в него, читать из него, копировать, удалять и делать все остальное, используя обычные функции. Надо только не забывать, что везде, где требуется имя файла, необходимо указывать полный путь с UNC-префиксом.

Тестирование показало, что использование префикса "\\?\" более надежно, чем "\\.\". При использовании второго префикса, к примеру, можно потерпеть неудачу при попытке удаления файла. Этот способ еще хорош тем, что работает и в командной строке. Действительно, возможны манипуляции с файлами прямо из командной строки, не прибегая к каким либо языкам программирования. Набранная в командной строке команда "type \\?\f:\test\prn" отобразит содержимое созданного файла. Пример создания файла

и записи в него информации смотри в листинге 1. Способ второй: Подстановка символов . Тоже довольно удобный способ, который позволяет работать с файлами/папками любыми обычными средствами, а затем просто поменять название файла на какое-либо другое, некорректное. Этот способ реализовывается так: Если при использовании функций MoveFile, CopyFile, MkDir, RmDir и некоторых других подставить в конец нового названия файла или каталога два символа ".\", то файл создастся с любым нужным нам именем.

Этот способ тоже можно использовать в командной строке, но только с каталогами. Если набрать в ней строку то появится каталог, имя которого будет . При использовании этого способа в своих программах надо перед передачей параметра, содержащего путь к новому файлу или папке, добавить в его конец эти два символа. При использовании этого способа с функциями CopyFile и MoveFile два символа добавляются ко второму параметру функции. Использование способа в программе иллюстрирует листинг 2. Способ третий: Использование файловых потоков. Наименее удобный способ, так как годится только для создания файлов, и работает только на NT-системах с NTFS. Но, для полноты картины, я должен был упомянуть и его. Смысл способа в том, что мы создаем файл с прикрепленным к нему потоком, используя синтаксис, принятый при работе с файловыми потоками. Согласно Q115827 из Microsoft Knowledge Base, функция CreateFile проверяет последний символ переданного ей параметра, содержащего путь к файлу, и удаляет этот символ, если он является пробелом или точкой. В данном случае, последний символ этого параметра является последним символом не имени создаваемого файла, а названия потока. В этом и состоит хитрость - при таком подходе мы можем задать любое имя файла, в том числе и зарезервированное за DOS-устройством, а система будет не замечать этого. Посмотри на листинг 3. Для разнообразия создадим файл с именем, оканчивающимся на пробел. Созданный файл будет содержать прикрепленный файловый поток, который в принципе нам не был нужен, ведь наша цель была получить файл с зарезервированным именем. Недостатки этого способа в том, что перед его использованием в программе, нужно обязательно проверять, какая файловая система используется на конкретном диске.

Создай файл или каталог с некорректным именем, используя любой из вышеописанных способов. Теперь попробуй сделать с ним то, что каждый день делаешь с другими файлами и каталогами. Попробуй скопировать файл, переместить его, переименовать, открыть его любой программой, удалить, наконец.

Ну что, получилось что-нибудь? Вряд ли, потому что при попытке доступа к файлу система использует те же самые функции, которые используем мы, но, в отличие от нас, система не знает наших хитрых способов, и поэтому получается так, что система фактически блокирует сама себя. Ну как, может сам догадаешься, какие возможности это предлагает? Первое что приходит в голову - это блокировка доступа к секретной информации. Конечно, это не так надежно, как шифрование, но что мешает тебе зашифровать какой либо файл, и, для верности, еще и закрыть к нему доступ, задав некорректное имя. Кроме того, мало кто сможет скопировать такой файл, что бы подобрать позже пароль в спокойной обстановке. Есть возможность вообще спрятать файл так, что его не будет видно. Способ работает только с файловыми системами FAT\FAT32. Если переименовать существующий файл, содержащий информацию, задав ему имя , то файл перестает быть видимым в Проводнике. Соответственно найти невидимый файл будет довольно сложно. Файл можно увидеть только из командной строки, или в файловых менеджерах. Однако если файл создать в корневом каталоге диска, то файловые менеджеры его тоже не видят. Еще один возможный трюк: создается папка с таким же именем, и тоже невидимая. Суть в том, что в этой папке, используя способ №1 можно создавать файлы! В эту папку можно сохранять какие либо файлы, а чтобы получить к ним доступ, нужно как минимум знать их имена. Средствами Windows получить список файлов из этой папки невозможно, и получается защита не хуже архива с паролем!

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

Примечание. Применять для файлов и папок имена COM, COM10, COM11…, LPT, LPT10, LPT11… системой не возбраняется.

Имена файлов в FAT
В файловой системе FAT использован традиционный формат имен 8.3, имена файлов должны состоять из символов ASCII. Имя файла или каталога должно состоять не более чем из 8 символов, затем следует разделитель «.» (точка) и расширение длиной до 3 символов. Первым символом имени должна быть буква или цифра. При определении имени можно использовать все символы за исключением перечисленных ниже:
. «/ \ [ ]:; | = ,

Использование этих символов может привести к получению неожиданных результатов. Имя не должно содержать пробелов.

Соглашения именования в NTFS
Имена файлов могут состоять не более чем из 255 символов, включая любое расширение. В именах сохраняется регистр введенных символов, но сами имена не зависят от регистра. NTFS не различает имена в зависимости от регистра. В именах могут быть использованы любые символы за исключением указанных ниже:
? «/ \ ≤> * | :
В настоящее время из командной строки можно задать имя файла длиной не более 253 символов.

Можно ли обойти запреты файловой системы
Можно создать папки с зарезервированными именами с помощью Интерпретатора команд Windows, например:
— нажмите Пуск → Выполнить… → Запуск программы → cmd → OK;
— в открывшемся окне Интерпретатора команд после приглашения системы введите mkdir .\com1\ (Enter).

Системные папки
Также Windows не позволит переименовать или переместить системные папки, такие как «Documents and Settings» (в Vista — «Пользователи»), «Windows», «System32», «Program Files». Они необходимы для нормальной работы Windows (если каким-либо образом — не в среде Windows — их переименовать/переместить, то вы не сможете загрузить операционную систему).

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

Понятия «путь» и «имя файла»

Очень часто в компьютерной литературе используются термины «путь» и «имя файла» под разными значениями. Обычно под словом «путь» понимают адрес или расположение файла, т. е. диск, папка и подпапки в которых расположен файл. Однако Microsoft и другие считают, что в путь к файлу входит не только его расположение но и само имя файла. А некоторые подразумевают под словом «путь» только имена файла и папок, в которых он расположен, без указания диска. Некоторые пользователи полагают, что «имя файла» не включает расширение. В данной статье расширение всегда является частью имени файла. На примере ниже синим цветом выделен путь к файлу, а красным имя файла.
X:\папка\подпапка\ файл.расширение

Зарезервированные символы и имена

Ограничения на длины имен файлов и путей

Существуют ограничения на длину имени файла и на длину пути. Абсолютное ограничение длины имени файла вместе включая путь к нему равно 260 символам. Этот предел называют термином MAX_PATH. На самом же деле на практике пределы для имен еще меньше из-за ряда других ограничений. Например, каждая строка на конце должна содержать так называемый нулевой символ, который обозначает конец строки. Несмотря на то, что маркер конца строки не отображается, он учитывается как отдельный символ при подсчете длины, а значит остается 259 символов доступных для имени файла и пути к нему. Первые три символа в пути используются для обозначения диска (например, C:\). Это уменьшает предел для имен папок, подпапок и файла до 256 символов.

На имя объекта (папки или файла) наложено ограничение длины 255 символов. Этот предел действителен только, если объект не расположен внутри папки. Так как при расположении объекта внутри папки, сумма длин всех папок в которых он расположен, разделителей и имени объекта ограничена 256 символами, то предел длины самого имени объекта меньше 255 символов.

Мне нужно создать файл с именем файла, например :>? , возможно ли это как-то? Windows это останавливает.

У каждого ограниченного символа есть другое значение или использование, поэтому, если имя файла или папки действительно содержит их, это может привести к возникновению Bad Things ™. Не возражаете, если я спрошу, почему вы пытаетесь это сделать? @ DMA57361, когда я делал это несколько лет назад, я проверял некоторые вещи. Если я правильно помню, результаты были забавными, но я не помню ничего особенно плохого . Самое большее, я просто не мог получить к ним доступ. (Хотя я полагаю, что это может вызвать проблемы, если, например, у вас есть файлы с именами a , b и вы a>b type a>b @moorecast, когда я делал это несколько лет назад, я создавал файлы / каталоги с фиктивными именами, а затем использовал редактор дисков, чтобы вручную устанавливать имена в записях каталога. Конечно, это было на томе FAT32, так что это было очень легко. Это было бы немного сложнее на томе NTFS. Mind if I ask why you are trying to do this? Может быть, реализовать (плохую) защиту от копирования ? «Мне нужно создать файл с именем файла, например:>?» - Сомневаюсь, что тебе нужно это сделать.

К сожалению, вы не можете использовать зарезервированные символы при создании папок или файлов, поскольку они являются частью системных функций.

То, что я рекомендую вам сделать, это просмотреть Character Map приложение - вы можете запустить и набрать charmap .

отсюда вы можете найти альтернативные символы, которые выглядят одинаково, например:

(скопируйте и вставьте их, вы увидите, что они разные)

Вместо косой черты / - вы можете использовать символ деления ∕

Вместо двоеточия : - вы можете использовать модификатор буквы двоеточия ꞉

альтернативный текст

@Arjan - только через командную строку .. даже тогда вы можете использовать клавишу табуляции для автозаполнения. Я использовал этот трюк для определенных ситуаций, например, когда мне нужно поставить вопрос в имени файла ( почему Microsoft оставил вопросительный знак зарезервированным? ఠ_ఠ) К сожалению, мне пришлось прекратить использовать любые символы не ASCII, потому что они вызывают проблемы с такими вещами, как программы дефрагментации, которые по какой-то причине кажутся неспособными перемещать файлы с символами Unicode в именах. ಠ Если подумать, этот ответ на самом деле тоже не отвечает на вопрос. Есть ответы ниже , что делать , так что это тоже должно быть просто комментарий.

Вы можете загрузиться с диска Linux (например, Knoppix ) и смонтировать раздел NTFS.

Linux имеет гораздо меньше ограничений на имена файлов, и позволит вам создавать такие имена (я пробовал).

Некоторые операционные системы запрещают отображение определенных символов в именах файлов: (Ресурс из Википедии )

\ backslash Также используется как разделитель компонентов имени пути в MS-DOS, OS / 2 и Windows (нет разницы между косой чертой и обратной косой чертой); разрешено в Unix имени файла

? знак вопроса, используемый в качестве подстановочного знака в Unix, Windows и AmigaOS; отмечает один символ Разрешено в Unix имена файлов

* звездочка используется в качестве подстановочного знака в Unix, MS-DOS, RT-11, VMS и Windows. Отмечает любую последовательность символов (Unix, Windows, более поздние версии MS-DOS) или любую последовательность символов в базовом имени или расширении (таким образом, « . » В ранних версиях MS-DOS означает «все файлы». Допускается в именах файлов Unix ,

: двоеточие используется для определения точки монтирования / диска в Windows; используется для определения виртуального устройства или физического устройства, такого как накопитель на AmigaOS, RT-11 и VMS; используется в качестве разделителя пути в классической Mac OS. Удваивается после имени в VMS, указывает имя узла DECnet (эквивалентно имени хоста NetBIOS (сеть Windows), которому предшествует "\".)

| вертикальная черта обозначает программную конвейеризацию в Unix и Windows; разрешено в именах файлов Unix

"кавычка используется для обозначения начала и конца имен файлов, содержащих пробелы в Windows

<меньше, чем используется для перенаправления ввода, разрешено в именах файлов Unix

> больше, чем используется для перенаправления вывода, разрешено в именах файлов Unix

, период разрешен, но последнее вхождение будет интерпретироваться как разделитель расширений в VMS, MS-DOS и Windows. В других ОС, обычно рассматриваемых как часть имени файла, допускается более одной полной остановки.

Читайте также: