冷知識 - 刪不掉的 Windows 檔案
13 | 26,962 |
同事問了一個鬼問題 - "Windows 檔名可不可以只有一個空白?"
答案是可以。測試過程我搞出一個怎麼都砍不掉的檔案,花了點時間才清掉,學到冷知識。
依據微軟文件,檔案或目錄名稱不能包含以下字元:
- < (less than)
- > (greater than)
- : (colon)
- " (double quote)
- / (forward slash)
- \ (backslash)
- | (vertical bar or pipe)
- ? (question mark)
- * (asterisk)
所以空白是合法的字元,像是 "Hello World.txt" 完全沒問題,但文章有提到不要用空白或點做結尾,對檔案系統雖然合法,但 Windows Shell 或檔案總管無法支援,所以如果你想惡搞同事,可以這麼做。在他的資料夾生出三個名為" . "、" .. "、"來刪我呀,笨蛋!. "的空檔:
這三個檔案對檔案總管來說是隱形的,看得到刪不掉:
" . " 跟 " .. " 更玄,會出現被其他應用程式開啟無法刪除的訊息:
學駭客用 DOS 下指令,總能成功吧?不行!
啃,難道要逼我格式化磁碟才能刪掉它們?前面提的微軟文件有答案,有個特殊字首 - "\\?\",加在路徑前方會跳過 Windows Shell 或檔案總管的路徑字串解析或檢核,直接送交 Windows API 執行,可解決路徑超過 MAX_PATH 長度限制或前面所說"."結尾檔名等 GUI 無法處理的特殊狀況。所以,加上"\\?\"就能順利解決這些垃圾囉~
又學到一些冷知識。
Filename ending with '.' can't be deleted by Windows GUI or shell, \\\\?\\ prefix is required to access them.
Comments
# by Leo
學到新知識了,謝謝
# by Leo
學到新知識了,謝謝!
# by Guest
del *.* 呢?
# by ByTIM
那能改回正常的檔名,然後刪除嗎?
# by pjw
我怎麼無法建立三個示範的空檔...
# by 小白
感謝學到冷知識 另外補個LINUX遇到這類問題的解法 當有 "\." ".." 或" " 檔案的時候,可以用反斜線測看看 ex. rm \\. \\.. "\ " 當有 "-" 開頭的時候 建議使用rm -- "-檔名"
# by Dxball
@pjw (type nul)>"\\?\D:\foo\ .. " 就會在 D:\foo 下建立一個名叫 " .. " 的空檔案 用 win32 api 的 CreateFile 也可以
# by USER
請問你的 CMD 終端機是用哪個程式?
# by QUQ
我是用WIN7 我測試可以直接刪除啊.....
# by Jeffrey
to USER, 下 DOS 指令是用 Cmder,大推大推再大推! https://blog.miniasp.com/post/2015/09/27/Useful-tool-Cmder
# by Ike
@Jeffrey 黑大是不是也有用 Windows Terminal 不知有沒有 Cmder 與 Windows Terminal 的比較心得
# by Jeffrey
to lke, 不用比較,做成瀨尿牛丸就成了。我在 Windows Terminal 也會整合 Cmder,比 CMD 好用很多(尤其 git Branch 及狀態顯示,超重要),Windows Terminal (以下簡稱 WT) 的分割視窗是強項,但整合 Cmder 啟動速度稍慢,簡單操作我會開 Cmder 就好。
# by Nye
等等,那個以下簡稱WT沒有以下... XD