一個無法刪除的Windows同名資料夾
同事在一個意外之下,製造出了兩個同名資料夾:
好玩的事:一個可被刪除,另一個不管用什麼方式都無法被刪除。
從圖可見,最後按完 b 再按多次 Tab 可以發現已經處於無法發現資料夾的狀態。
如果指定完整路徑(z:\...\...
格式),疑,同名資料夾按 Tab 又跳得出來,但訊息又跟我說,此路徑不存在!令人百思不得其解。
想了又想,要不,去 cmd.exe 試試看,搞不好 PowerShell 刪不掉的東西 cmd.exe 能刪。(雖然機會很小)
小幸運的,第一個指令就抓到問題點:
按完 b 再按 Tab,發現,天呀,資料夾名稱結尾多了一個空白!雖然 cmd.exe 比 PowerShell 在取得路徑上好一些了,但按下 Enter 還是得到「找不到 Z:\foo\bar」的訊息。
截至目前為此,還沒找到任能能刪除資料夾名稱結尾多了一個空白指令。
同名資料夾是怎麼發生的?
警告:以下事件測試指令有一定風險,我是在 RamDisk 模擬測試,如果你想測試,請在可還原(format)的地方測試,例如,USB隨身碟,記憶卡之類的。
原來,目錄是透過 Azure DevOps 而來,分析 Azure DevOps 設定結構後,發現原本本來是要建立一個多層資料夾的結果。我大膽假設小心求證:
New-Item z:\foo\bar\blah -ItemType Directory
New-Item z:\foo\bar \blah -ItemType Directory
就這樣被我不小心給證實了。也就是上面測試圖片的來源。一般手動建立,我們可能會一層一層透過 mkdir
、New-Item
之類指令來建立,不論透過指令或檔案總管,在手動建立的過去,只要是含尾部空白名稱的資料夾,會自動被 trim 成不含尾部空白資料夾名稱,也因為這樣,不會有同名資料夾產生的機會。以上規則,也適用於刪除指令上,也就是說,當我們傳送 z:\foo\bar
要進行刪除時,路徑被 trim 成了 z:\foo\bar
。這也合理的給出解釋,為什麼會有同名資料夾,其實它並不同名,只是我們看不見。刪除說找不到路徑,也一併說的過去了。
頭緒算是都釐清了,剩下一件事:我找不到任何方法刪除它。(我書讀太少,請參考下方留言。)
dir看8.3的檔名,應該有~1之類的名稱,用8.3的檔名刪
回覆刪除https://blog.darkthread.net/blog/delete-invalid-filename/ 存取及刪除方法參考
回覆刪除這是超冷知識,關鍵字超難下,好文,受教了。
刪除dir /x 直接看 8.3 檔名
刪除