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
有鑑於此範例,有什麼方法可以使be的簡稱嗎REALLY~1.TXT
?
答案1
據我了解,NTFS 在建立時會自動指派持久的 8.3 檔案名稱。當您執行 dir /X 時,它不會即時縮短檔案名,而是尋找預先分配的短名稱。
答案2
正如傑克在他的回答中指出的那樣,短名稱是在創建文件(或重新命名或移動)時分配的。該值取決於長檔名以及已存在的其他短名稱。
確切的短名稱分配演算法沒有記錄,並且不能保證演算法在 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