Windows 短文件名中 ~ 后面的数字如何赋值?

Windows 短文件名中 ~ 后面的数字如何赋值?

Windows 仍使用缩写来缩短长名称的文件和目录。您可以在命令提示符中~输入来查看“短”名称。dir /X

我的问题是如何为短文件名分配数字?它似乎不是按字母顺序排列的,也不按文件创建时间排列。

例如:

我创建一个新的文本文件:C:\reallylongfilenameB.txt

然后我运行dir /X并看到 fileB 的短名称是REALLY~1.TXT

我创建了第二个文本文件:C:\reallylongfilenameA.txt

然后我运行dir /X并看到 fileA 的短名称是REALLY~2.TXT

然后我将时钟往回拨一天,删除C:\reallylongfilenameA.txt它,然后重新创建,本质上使创建日期C:\reallylongfilenameA.txt提前 1 天C:\reallylongfilenameB.txt

我跑过去dir /XC:\reallylongfilenameA.txt短名依然REALLY~2.TXT

鉴于这个例子,有没有办法使简称C:\reallylongfilenameA.txtREALLY~1.TXT

答案1

据我了解,NTFS 在创建时会自动分配持久的 8.3 文件名。当您运行 dir /X 时,它不会即时缩短文件名,而是查找预先分配的短名称。

来源:http://en.wikipedia.org/wiki/8.3_filename

答案2

正如 Jack 在他的回答中指出的那样,短名称是在创建(或重命名或移动)文件时分配的。该值取决于长文件名以及已存在的其他短名称。

确切的短名称分配算法尚未记录,并且无法保证该算法在 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

相关内容