題 為什麼不能在Windows 7中命名文件夾“._。”?


我只是注意到無法命名文件夾 ._.  - 它被命名 ._ 代替。有時,它在命名後會消失,但在刷新視圖後會重新出現。 Windows似乎在文件名末尾有點問題 - 這是為什麼?


73
2018-01-18 20:57


起源


值得注意的是你偶然發現了 “黑客” 用a來啟動文件名 . 在Windows中。 - jpmc26
@ThisNameBetterBeAvailable未經測試,但是 cd -- -_- 可能會奏效。該 -- 是一個常見的“選項結束”標記。 - TripeHound
@ThisNameBetterBeAvailable不, -- 憑藉自己的方式“這是選項的結束,從開始處理任何事情 - 作為字面值“。剛測過: mkdir -- -_- 和 cd -- -_- 像我預期的那樣工作。 - TripeHound
或者, ./-_- 也應該工作。 - glglgl
@Alexander在linux中,因為這似乎是評論所針對的地方 cd "-_-" shell使用引號進行分組,但不將它們視為參數的一部分;它的錯誤 invalid option - Izkata


答案:


Windows通常要求文件沒有擴展名或擴展名至少一個字符長;對於零長度擴展,即以文件名結尾的文件名,這並不酷 .。文件夾也可以有擴展名,因此,Windows不會讓他們的名字以a結尾 .。來源,來自 DavidPostill鏈接的文章

使用句點將基本文件名與a名稱中的擴展名分開 目錄或文件

(強調我的。)如果你試圖結束一個以句點命名的文件或目錄,Windows只是假設你不想要擴展名,所以刪除它,即使你創建它 md 在命令提示符下。

危險區! 如果您迫切希望以文件夾名稱結尾 .,你需要使用魔術原始名稱覆蓋序列 \\?\。在命令提示符中, md \\?\C:\path\to\container\._. 確實會創建一個名為的文件夾 ._.,但很多程序都會遇到問題,甚至資源管理器:

._. problems

只能刪除這樣的目錄 rd 其次是它 \\?\ 名稱或用其短名稱重命名(8.3, dir /x) 名稱。


123
2018-01-18 21:05



謝謝你的詳細解答! :)我認為這將是一個完美的文件夾來隱藏密碼內部的密碼,因為你只能在首先重命名它時打開文件夾,而不是每個人都知道如何重命名它。 - Black
@EdwardBlack它不會阻止任何能夠讀取堆棧交換的人(因此甚至不會提供針對假設的小兄弟的安全性)。給出的名字 dir /x 讓它變得非常簡單,而且有時候這個名字很方便。 - Chris H
FWIW,Cygwin的命令行工具也可以在Windows 7上創建(和操作)這樣的目錄,而無需使用魔術序列。 - Steve Jessop
@EdwardBlack正如Chris H所提到的,它不是很秘密,所以你不應該在這樣的文件夾中存儲特別重要的東西。此外,數字保密和保護是一個已經多次解決的問題。您可以使用任意數量的加密方法和程序來保證安全,而不依賴於模糊的文件夾名稱。 - Kris Harper
Nitpick:至少在8.3天內(我還沒有調查過在NTFS上寫入磁盤的內容),這段時間從未寫入磁盤。名稱分為名稱和擴展名,它們分別存儲。在閱讀時,它取了名稱,如果有一個擴展名添加了名稱的期限和擴展名。因此,沒有辦法表達。在目錄結構中,當然你丟失了尾隨點。 - Loren Pechtel


Windows似乎在文件名末尾有點問題?為什麼是這樣?

不要使用空格或句點結束文件或目錄名稱。雖然底層文件系統可能支持此類名稱,但Windows shell和用戶界面卻不支持。

下面的源鏈接詳細介紹了命名規則。

資源 命名文件,路徑和命名空間


22
2018-01-18 21:04



這對我來說仍然聽起來像蟲子。 - ralu
@ralu如果它是一個bug,那麼MS在修復它時似乎完全無趣。自Windows XP以來一直存在這些限制(如果不是更早)。 - DavidPostill♦
Windows XP?我的猜測是這些限制源於MS-DOS 0.x - 讓我們讓蓋茨先生澄清這個問題...... - Christian Severin


這不是一個bug。設計是為了防止兼容性問題。
它是舊DOS時代的遺留物。

FAT12(軟盤)和FAT16文件系統(在Windows 95中引入長文件名支持之前的FAT16)只有以11個字節存儲的文件名:
名稱為8個字節,擴展名為3個字節。名稱和擴展名之間的“期間”甚至沒有存儲。它被暗示並自動添加以用於顯示目的。
目錄根本沒有擴展。相反,擴展名的3個字節填充了“$”字符(在實名中是非法的)。
由於Windows仍然與此Explorer兼容,因此Windows的許多其他組件會靜默地使尾隨句點消失,以防止產生兼容性問題。
正如其他人所說,你可以通過使用RAW語義(絕對路徑名之前的\\?\前綴)來實際處理這些文件夾。
在幕後,NTFS和網絡文件系統對這些文件和文件夾沒有任何問題。這只是資源管理器試圖阻止用戶創建可能導致其他軟件出現問題的一種情況。

(事實上還有其他一些遺留問題:
文件名如COM,COM1,COM2,AUX,PRN,LPT,LPT1,LPT2,LPT3,CON可能導致類似的問題,其中資源管理器和許多其他Windows部件都被混淆,因為這些名稱是“保留”名稱,也可以追溯到DOS時代。)


17
2018-01-20 16:37



對於其他讀者來說,這些讀者最初對於沒有存儲的點是不相信的:這對於CP / M和所有FAT版本都是正確的,包括 FAT16 和 FAT32。 - Ben N
我記得一些舊的DOS程序(在實際的DOS上運行,可能直接使用INT13函數)通過以某種方式設法在c:驅動器上創建一個名為a:foo.bar的文件給我真正的悲痛...... - rackandboneman
@BenN:實際上,在FAT32上它有點不同;它存儲一個短文件名(8 + 3字節,帶有“隱式點”向後兼容名稱),加上一個長文件名(經常稱為LFN),由最多255個帶有顯式點的UCS-2字符組成,除非您正在使用16位應用程序,您始終使用LFN。 - Matteo Italia
@MatteoItalia據我所知,長文件名保存在虛假文件條目中;知道的Windows安裝會查找這些條目並在可能的情況下呈現它們而不是SFN。看到 Raymond Chen關於這個主題的帖子,或上面鏈接的FAT32格式規範的VFAT部分。 - Ben N
-1你對目錄擴展錯了;也許這對CP / M來說是真的(我的內存對於那個操作系統很糟糕),但是自從DOS時代以來我一直在我的樹中使用“programm.ing”目錄,並且看到 win.tue.nl/~aeb/linux/fs/fat/fat-1.html  - 目錄條目完全作為文件處理,它們也可以具有8.3名稱。測試:創建一個8.3目錄(mkdir testfile.name)並在Windows中顯示其DOS名稱(dir /x) - 你會得到 TESTFI~1.NAM正如預期的那樣。 - vaxquis


這裡的問題是Windows(DOS)允許FAT文件系統上的8.3文件名。含義,8個字符,後跟a。接下來是三個字符。 Unix和Linux允許任何字符,除了/和\ 0。 \ 0是C字符​​串終止符,/是目錄分隔符。其他一切都可以使用。

Windows 95通過將短(8.3)文件名數據庫維護為長文件名(LFN)元數據來解決此問題。如果您擦除了Windows 95操作系統文件,則在下一次安裝Windows 95時,您將在磁盤上留下奇怪命名的文件。例如,“我的文檔”可以在磁盤上命名為MYDOCU~1。顯然,如果您丟失了元數據,則無法輕鬆轉換這些數據。

shell必須應對自MS-DOS時代以來一直存在的許多歷史增量。

希望這可以幫助


3
2018-01-20 20:06



本身並沒有真正的數據庫; Windows只是將長文件名的部分作為虛假文件卡在磁盤上。看到 Raymond Chen關於這個主題的帖子。 - Ben N