刪除頑固以8.3文件名命名的***

關於8.3文件名

====================源自DOS時代的8.3格式文件名規範====================

所謂8.3格式短文件名規範,就是型如 PROGRA~1(目錄)或者
元素周~1.exe(文件)這樣的名稱——
“8”是指文件名或目錄名的主體部分小於等於8個字節;
“3”是指文件名的擴展名部分小於等於3個字節。
另外還有一點,就是8.3文件名的有效字符不包括空格等特殊字符。

8.3短文件名格式規範是DOS+FAT12/FAT16時代遺留下的老規矩,
自從Windows95開始(其實據說從Windows for Groups 3.11開始),
Windows就已經能支持長文件名,但是爲了向前兼容,特別是文件系統兼容性,
FAT文件系統均強制執行“爲長文件名提供8.3兼容格式的短文件名”的特性。

因此你會看到,在FAT16/32文件系統上:
目錄"program files"同時還擁有一個8.3規範的"PROGRA~1"短名稱;
而文件"元素週期表.exe"也同時擁有一個"元素周~1.exe"的短名稱。
[這有一點像類UNIX系統下的hardlink,一個對象擁有兩個引用方式。]

PS:知道爲什麼IE瀏覽器的主程序叫做iexplore.exe 而不是iexplorer麼?
就是爲了照顧8.3短文件名規範。

 


===================NTFS文件系統與8.3格式規範的兼容性===================

NTFS文件系統支持unicode(UTF16)字符集文件名,最長達255個UTF16字符,
因此NTFS文件系統以及基於unicode字符集的32位NT內核Windows操作系統
本身都沒有必要遵循16位DOS時代遺留的8.3格式短文件名規範。

但還是爲了兼容性,NTFS文件系統也提供了一個可選的特性:8.3兼容格式。
Windows中這個特性默認是on,也就是說每當建立一個長文件名的對象的同時,
系統的NTFS驅動模塊會自動建立一個合適的8.3格式短名稱指向這個對象。
需要指出的是,這個特性並不像FAT文件系統中那樣是強制執行的,
因此不同的磁盤實用程序或者操作系統可能有不同的執行方式——
比如windowsXP中可以用 fsutil behavior set disable8dot3 1 命令關閉,
驅動模塊關閉這一特性後就不會每次都額外地建立一個附加的短名稱,
這樣在新建/重命名大量小文件/目錄的時候能略微提升磁盤的寫入速度,
(不用計算出一個合適的短文件名,也不用把這個額外的信息寫入磁盤)。

 


=================非win32標準的老程序兼容性依賴8.3規範=================

但是,關閉這一特性之後可能導致某些古老的應用程序出現兼容性問題,
這些程序雖說是32位GUI界面的“windows應用程序”,卻不完全遵循win32
程序的規範,而是通常混合有16位API,使用8.3格式短名稱來引用文件。
很顯然,如果在一個NTFS分區上根本就不爲長文件名提供短名稱,那麼這些
16/32位混合型老程序將無法用8.3格式短名稱來找到文件,當然會出錯……
但是事情並不總是這麼簡單的——

最近我發現有幾個老的應用程序不能正常啓動,這包括曾經在科大校園網上
非常流行的科技大詞典(主程序 ncce_win.exe,怎麼樣,熟悉不?)
細查原因,似乎只是放在NTFS分區纔會出問題,移到FAT32的U盤上沒問題。
後來我驚訝的發現:把U盤格成NTFS再放上這個程序也沒問題!…… ……

數小時後,真正的的原因被找到了,說起來非常複雜,簡而言之:
全路徑上有一級目錄不兼容短文件名格式,因此主程序找不到相關文件!

 

爲什麼會有一級目錄不兼容8.3規範呢?

因爲我的硬盤是在以前的硬盤出故障後新換的,換上來之前,我在
一個64位windows操作系統上把舊硬盤上還能讀出的目錄一一複製過來,
而那個64位windows關閉了NTFS的8.3兼容特性,複製來的目錄和文件
都不具備附加的短名稱,特別是我放應用程序的E:\program files\目錄。
(64位windows理論上是完全不支持16位和16/32位混合程序的,因此可能
默認就關閉了NTFS驅動的8.3兼容性,或者也許是什麼優化程序關閉的。)

然後我用GHOST恢復了系統分區,恢復的32位winXP並沒有關閉8.3兼容性,
但關鍵問題是已經寫入NTFS分區的(不具備短名稱的)目錄和文件並不會被
這個32位XP重建短文件名,系統只會對新建的文件或目錄附加8.3文件名,
至於原先已經建立好的目錄和文件,即使是重命名這種操作,也無法
“提醒”XP檢查並追加上一個短文件名——這一點讓我百思不得其解。

於是,當我把軟件放在E:\program files\的子目錄中時,雖然子目錄
“科技詞典”,以及ncce_win.exe等文件名都符合8.3規範,但是全路徑上
有一個“program files”是不符合8.3規範的,並且沒有等效的短名稱代替,
所以某個API就無法用“E:\progra~1\科技詞典\xxxxxxxx.xxx”定位文件了,
這個程序當然無法正常啓動。

如何刪除該類文件

以 e:\123\ccs. 爲例。E盤爲NTFS格式,而css.爲以8.3命名的文件夾裏面包含8.3命名的文件,至於什麼文件,***們是最知道的。正常情況下,我們是讀不了刪不了該文件的,具體刪除的方法爲:

cmd--e:---cd 123--dir /x (能顯示以8.3命名的文件或文件夾):一般是以~ 1結尾。 之後如果是文件就用 del  xxx~1 ,文件夾就用 rd xxx~1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章