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 /X
,C:\reallylongfilenameA.txt
短名依然REALLY~2.TXT
。
鉴于这个例子,有没有办法使简称C:\reallylongfilenameA.txt
为REALLY~1.TXT
?
答案1
据我了解,NTFS 在创建时会自动分配持久的 8.3 文件名。当您运行 dir /X 时,它不会即时缩短文件名,而是查找预先分配的短名称。
答案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