Windows по-прежнему использует ~
для сокращения файлов и каталогов с длинными именами. Вы можете увидеть "короткое" имя, введя его dir /X
в командной строке.
Мой вопрос: как присваиваются цифры коротким именам файлов? Похоже, что это не алфавитный порядок и не работает по времени создания файла.
Например:
Я создаю новый текстовый файл:C:\reallylongfilenameB.txt
Затем я запускаю dir /X
и вижу, что короткое имя файла B —REALLY~1.TXT
Создаю второй текстовый файл:C:\reallylongfilenameA.txt
Затем я запускаю dir /X
и вижу, что короткое имя файла А —REALLY~2.TXT
Затем я перевожу часы на день назад, удаляю C:\reallylongfilenameA.txt
и создаю заново, по сути, устанавливая дату создания на C:\reallylongfilenameA.txt
1 день раньше C:\reallylongfilenameB.txt
.
Я бегу dir /X
, а C:\reallylongfilenameA.txt
короткое имя все еще REALLY~2.TXT
.
Учитывая этот пример, есть ли способ сделать короткое имя C:\reallylongfilenameA.txt
be REALLY~1.TXT
?
решение1
Насколько я понимаю, NTFS автоматически назначает постоянные имена файлов 8.3 при создании. Когда вы запускаете dir /X, он не сокращает имена файлов на лету, он ищет предопределенные короткие имена.
решение2
Как указал Джек в своем ответе, короткое имя назначается при создании файла (или переименовании, или перемещении). Значение зависит как от длинного имени файла, так и от того, какие другие короткие имена уже существуют.
Точный алгоритм назначения коротких имен недокументирован, и нет гарантии, что алгоритм останется постоянным между версиями Windows или даже между различными форматами систем хранения. Вам не следует писать код, который зависит от какого-либо конкретного алгоритма назначения коротких имен.
Существуют как ограничения дизайна, так и ошибки, возникающие из-за коротких имен файлов. Примером ограничения дизайна является del *.txt
возможность удаления файла с именем, something.txt2
поскольку расширение короткого имени, вероятно, будет .txt
, а исходные маски рассматривают как длинные, так и короткие имена. См. раздел под названием"ОШИБКА - Короткие имена файлов 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