最近同事在處理公司系統的時候發現一個問題,我們的程式在某些情況下會創出結尾空白的資料夾
發生無法移除資料夾的問題
而這種情況下如果要刪除它是沒辦法刪除的,如果直接按右鍵移除會出現 “找不到此項目的情況”
如果直接使用指令要移除它也是不行的一樣會出現 ”找不到 ‘C:\folder\can_not_del’ 路徑,因為它不存在”
PS C:\folder> rm can_not_del rm : 找不到 'C:\folder\can_not_del' 路徑,因為它不存在。 位於 線路:1 字元:1 + rm can_not_del + ~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (C:\folder\can_not_del:String) [Remove-Item], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand
問題原因
會發生這個問題其實是因為 Win32 開啟結尾空白的檔案或是資料夾它在開啟之前會自動移除結尾的空白,所以移除的時候是找不到檔案的。
解決方法
所以要移除它要使用一個特殊語法 "\\?\"
然後搭配對應的指令就可以把它移除,以上面的範例來說檔案路徑是 “C:\folder” 那使用以下指令就可以把它移除了
PS C:\folder> rd "\\?\C:\folder" 確認 位於 Microsoft.PowerShell.Core\FileSystem::\\?\C:\folder\ 的項目有子系,而且沒有指定 Recurse 參數。如果繼續進行,所有子系將會與讓項目一起移除。確定要繼續嗎? [Y] 是(Y) [A] 全部皆是(A) [N] 否(N) [L] 全部皆否(L) [S] 暫停(S) [?] 說明 (預設值為 "Y"):
如果不想出現移除提示可以換到 cmd (這個指令在 PowerShell 是沒辦法使用的)使用以下指令就可以把它用無聲方式移除了
C:\>rd /s /q "\\?\C:\folder"
問題重現
要測試是不是正常基本上就要可以再次重現問題,而我們也一樣無法直接使用介面直接創建結尾空白的資料夾,所以要創建結尾空白的資料夾只要使用以下指令即可完成。
PS C:\folder> md "\\?\C:\folder\can_not_del "
參考資料
《AWS CDK 完全學習手冊:打造雲端基礎架構程式碼 IaC》
第 12 屆 iT 邦幫忙鐵人賽 DevOps 組冠的《用 CDK 定 義 AWS 架構》
第 11 屆 iT 邦幫忙鐵人賽《LINE bot 好好玩 30 天玩轉 LINE API》
一個熱愛分享的雲端工程師!