網頁

一個無法刪除的Windows同名資料夾

一個無法刪除的Windows同名資料夾

同事在一個意外之下,製造出了兩個同名資料夾:

Same Name Folders

好玩的事:一個可被刪除,另一個不管用什麼方式都無法被刪除。

PowerShell Tab

從圖可見,最後按完 b 再按多次 Tab 可以發現已經處於無法發現資料夾的狀態。

Remove Same Name Folder

如果指定完整路徑(z:\...\...格式),疑,同名資料夾按 Tab 又跳得出來,但訊息又跟我說,此路徑不存在!令人百思不得其解。

想了又想,要不,去 cmd.exe 試試看,搞不好 PowerShell 刪不掉的東西 cmd.exe 能刪。(雖然機會很小)

小幸運的,第一個指令就抓到問題點:

CMD del path

按完 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

就這樣被我不小心給證實了。也就是上面測試圖片的來源。一般手動建立,我們可能會一層一層透過 mkdirNew-Item 之類指令來建立,不論透過指令或檔案總管,在手動建立的過去,只要是含尾部空白名稱的資料夾,會自動被 trim 成不含尾部空白資料夾名稱,也因為這樣,不會有同名資料夾產生的機會。以上規則,也適用於刪除指令上,也就是說,當我們傳送 z:\foo\bar 要進行刪除時,路徑被 trim 成了 z:\foo\bar。這也合理的給出解釋,為什麼會有同名資料夾,其實它並不同名,只是我們看不見。刪除說找不到路徑,也一併說的過去了。

頭緒算是都釐清了,剩下一件事:我找不到任何方法刪除它。(我書讀太少,請參考下方留言。)

4 則留言:

  1. dir看8.3的檔名,應該有~1之類的名稱,用8.3的檔名刪

    回覆刪除
  2. https://blog.darkthread.net/blog/delete-invalid-filename/ 存取及刪除方法參考

    回覆刪除
    回覆
    1. 這是超冷知識,關鍵字超難下,好文,受教了。

      刪除
    2. dir /x 直接看 8.3 檔名

      刪除

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。