2

Windows по-прежнему использует ~ для сокращения файлов и каталогов с длинными именами. Вы можете увидеть "короткое" имя, введя dir /X в командной строке.

У меня вопрос, как цифры назначаются коротким именам файлов? Это не похоже на алфавит и не работает ко времени создания файла.

Например:

Я создаю новый текстовый файл: C:\reallylongfilenameB.txt

Затем я запускаю dir /X и вижу, что короткое имя файла B REALLY~1.TXT

Я создаю второй текстовый файл: C:\reallylongfilenameA.txt

Затем я запускаю dir /X и вижу, что короткое имя файла A REALLY~2.TXT

Затем я возвращаю время на один день, удаляю C:\reallylongfilenameA.txt а затем воссоздаю его, по существу делая дату создания C:\reallylongfilenameA.txt 1 день до C:\reallylongfilenameB.txt .

Я использую dir /X и короткое имя C:\reallylongfilenameA.txt по-прежнему REALLY~2.TXT .

Учитывая этот пример, есть ли способ сделать короткое имя C:\reallylongfilenameA.txt REALLY~1.TXT?

2 ответа2

7

Как отметил Джек в своем ответе, короткое имя присваивается при создании файла (или переименовании, или перемещении). Значение зависит как от длинного имени файла, так и от того, какие другие короткие имена уже существуют.

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

Существуют как ограничения дизайна, так и ошибки, возникающие из-за коротких имен файлов. Пример ограничения дизайна:del *.txt может удалить файл с именем something.txt2 поскольку расширение короткого имени, вероятно, будет .txt , а исходные маски будут рассматривать как длинные, так и короткие имена. См. Раздел «BUG - короткие имена файлов 8.3 могут нарушать параметры /D и /S» в разделе. Что такое недокументированные функции и ограничения команды Windows FINDSTR? для примера ошибки, возникающей из коротких имен.

В томах NTFS могут быть отключены короткие имена файлов (короткие имена, которые существовали до их отключения, останутся). Многие люди (организации) отключают короткие имена в своей системе из-за проблем, которые они могут вызвать.

Обновить

Вот окончательный аргумент о том, почему пытаться установить алгоритм генерации коротких имен файлов - пустая трата времени - FSUTIL позволяет вам указать любое короткое имя для файла, если оно еще не существует в этом папка.

Вот соответствующая справочная документация FSUTIL

C:\test>fsutil file
---- FILE Commands Supported ----

findbysid               Find a file by security identifier
queryallocranges        Query the allocated ranges for a file
setshortname            Set the short name for a file
setvaliddata            Set the valid data length for a file
setzerodata             Set the zero data for a file
createnew               Creates a new file of a specified size
queryfileid             Queries the file ID of the specified file
queryfilenamebyid       Displays a random link name for the file ID

C:\test>fsutil file setshortname /?
Usage : fsutil file setshortname <filename> <shortname>
   Eg : fsutil file setshortname C:\testfile.txt testfile
3

Насколько я понимаю, NTFS автоматически назначает постоянные имена файлов 8.3 при создании. Когда вы запускаете dir /X, он не сокращает имена файлов на лету, а ищет предварительно назначенные короткие имена.

Источник: http://en.wikipedia.org/wiki/8.3_filename

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .