題 如何刪除路徑/名稱太長的目錄以進行正常刪除


嘗試刪除時,Windows似乎對文件名有一個長度限制,但它不會阻止創建這些文件。

我們的構建過程會創建許多臨時文件(許多構建自WSDL),這些文件與此限制相衝突。我們的ant腳本在乾淨的時候能以某種方式刪除它們,但有時候我需要刪除workarea目錄(所有臨時文件都去了),而不是實際上從ant完全清除。

這是同樣的錯誤 這個問題,但那裡的答案並不適合我,因為我正在處理目錄,而不是文件,我並不總是知道哪些特定文件或子目錄導致了問題。我試圖避免任何手動過程(除了觸發單個命令)實際刪除它們。

如果我嘗試從資源管理器中刪除該目錄,我會收到錯誤

Cannot delete [file name]: The file name you specified is not valid or too long.  
Specify a different file name

Remove-Item 在powershell中出現以下錯誤:

Remove-Item : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
At line:1 char:12
+ Remove-Item  <<<< -force -Recurse <directory>

有沒有人知道任何工具或簡單的方法來解決這個刪除錯誤,而無需手動查找問題文件並移動/重命名它們?


355
2017-12-03 19:23


起源


我在發布這個問題之前就找到了解決方案,但是由於其他人可能遇到這個問題,我決定發布它以便他們找到我遇到的解決方案。 - Herms
哦,我知道,但一般來說,當我做這樣的事情時,我會在一段時間內留下“未答复”的問題,看看是否有其他人有更好的解決方案。 - Herms
通過 遠 最簡單的解決方案: youtube.com/watch?v=qQTyTprFAOg - TaW
運用 Ubuntu 或任何其他 Linux Bootable CD 我們可以啟動我們的電腦 Ubuntu或者臨時的任何其他操作系統。然後我們可以選擇文件夾,我們可以輕鬆刪除它。 - kelum priyadarshane
這個老問題也有一些有趣的答案: superuser.com/questions/45697/... - AdamV


答案:


使用 的7-Zip 文件管理器刪除它們。

如果您仍然遇到問題,請確保使用 轉移+刪除 在7-Zip文件管理器中。否則,Windows會嘗試將它們移動到回收站(這將再次失敗)。


402
2017-12-03 19:48



謝謝 - 這擺脫了一個有點遞歸的目錄樹,太深了del / rmdir / rm / explorer刪除 - Martin Beckett
使用shift + Del工作得很好 - 7zip無法將長篇文件發送到回收站.... - cori
+1 7zip。你必須導航到該文件夾,然後使用 shift + Del 像@cori說的那樣。如果你選擇了 Delete 從上下文菜單中選擇,它在那裡失敗了。 shift + Del 它! - Urda
7zip沒有為win7 64工作,所以linux做到了。 - Erik Friesen
我贊成這個因為使用7zip你可以刪除一個包含裡面長嵌套文件夾的文件夾。我有一個node_module文件夾的問題包含crap噸嵌套文件夾,我無法刪除它。 7zip從基礎文件夾中完美固定。 +1 - Gruber


這裡沒有其他(免費)答案適用於我,但我在另一個網站上找到了一個:

rimraf <dir>

rimraf 是一個 Node.js的 包,所以你需要安裝包含的Node.js NPM。然後你可以運行:

npm install -g rimraf

然後你就可以跑了 rimraf 從命令行。

我找到了這個解決方案,因為npm本身導致了這個問題,因為它嵌套了依賴關係。

順便說說, rimraf 從UNIX命令獲取其名稱 rm -rf,以遞歸方式刪除文件和文件夾。


307
2017-07-04 06:23



試過很多方法。這完全正常! - Duckegg
最好的答案:)是的,它很容易讓人感到輕鬆 - Al-Mothafar
這應該是公認的答案。 - NINCOMPOOP
您的解決方案有效,但這是f ## k-up,我必須使用節點js模塊刪除節點js模塊文件夾... 我不想再活在這個星球上了 - Benoit P
Node首先為我創造了這個問題,所以...有趣......他們也有一個解決方案。 - Eric J.


無需安裝任何程序 解決這個問題。

使用這個問題很容易解決 robocopy,預裝自Windows Vista,於2006年推出。

例如, rmdir /S /Q <dir> 據報導,在某些情況下會失敗。無需使用7zip或任何其他第三方工具。 Powershell是一種矯枉過正。 Cygwin可能有效,但您可能沒有安裝它。所以,讓我們關注 robocopy

這個想法是為了

  1. 使用 robocopy 複製+更新
  2. 從一個 新的空文件夾 
  3. 到目標要刪除的文件夾。

執行後 robocopy,目標目錄也是空的。

這些說明適用於命令行。只需在Windows中打開搜索,輸入即可 cmd 並按Enter鍵。

讓我們說吧 目標 刪除是:

C:\delete\this folder\with a very long name

我們按以下步驟操作:

  1. 首先創建一個空目錄,f.i。 C:\emptyfolder

    mkdir C:\emptyfolder
    
  2. 使用該選項將空目錄複製+更新到目標 /purge

    robocopy c:\emptyfolder "C:\delete\this folder\with a very long name" /purge
    
  3. 刪除空目錄。你不再需要它了。

    rmdir c:\emptyfolder
    

由於源目錄中沒有文件或文件夾(C:\emptyfolder),它只是刪除目標目錄下的文件和文件夾(C:\delete\this folder\with a very long name)遞歸!

  • 最後一招:你可以避免手寫

    C:\delete\this folder\with a very long name
    

    通過從資源管理器窗口拖動文件夾並放入終端/ cmd窗口。

小心:已刪除的文件 不會去垃圾桶 夾!刪除後,無法恢復文件。

(取自 BVLANGEN的“路徑太長了?使用Robocopy”

PS:我意識到這個答案就在這裡,不那麼說教。 如何在Windows中刪除文件太長的文件? [重複]

伯努瓦 添加:

您可能需要多次執行此過程才能刪除所有文件。


120
2018-03-03 16:45



謝謝你,先生!這應該是所有其他人都接受的答案 沒用 或需要一個 第三方工具。 :) - MickyD
這完美地工作......不需要安裝任何東西(據我所知)並且它很快。這應該是公認的答案! - ksumarine
這將一些(或全部)目錄樹保存在“c:\ deletefolder”(目標目錄)下。無論如何,為我眨眼刪除了所有內容(猜測文件很小)我只需要手動<Del>“c:\ deletefolder”,孩子們的dirs被刪除沒有問題。工作就像一個魅力。 +1,應該是接受的答案! :) - rld.
@rld,但之前存在“deletefolder”嗎?否則,我認為如果它是一個新目錄,它應該是空的。否則它就是一團糟。我可以為“rmdir deletefolder”添加最後一步。 - hectorpal
處理高遞歸目錄時,此選項比7zip慢得多。在等待20分鐘後,我對它們進行了基準測試並實現了7zip,儘管沒有顯示進度運行速度提高了50倍。 - Andy Gauge


我相信我找到了一種刪除東西的方法 cmd。本來我試過了 del 命令,但是沒有用。然後我記得 rmdir。執行以下操作:

rmdir /S /Q <dir>

似乎有效。


80
2017-12-03 19:24



不適合我。 :( - Andrew Arnott
記得在嘗試運行rmdir之前進入cmd。 - brianpeiris
對於那些無法使用此解決方案的人,我有一個適合我的替代解決方案(路徑/文件名太長):將文件/目錄移動到C:\以縮短路徑,然後從那裡刪除。 - Anders Sandberg Nordbø
可能有這個解決方案不適用的目錄,7-Zip可以刪除。我發生了這件事。 - SamStephens
該解決方案獲得了不一致的結果。請不要投票。 - hectorpal


我遇到這個問題時使用的工具是 FASTCOPY。我選擇了 刪除所有 從下拉列表中,選擇我要刪除的目錄,然後單擊 刪除所有

FastCopy delete dialog screenshot

FastCopy是可移植的(無需安裝),並且有32位和64位版本可用。


29
2017-11-25 20:22



如果您正在尋找命令行工具,您可以使用我在GitHub上發布的小工具(github.com/epsitec/Tools-RecursiveDelete)。 - Pierre Arnaud
我有一組遞歸生成的嵌套文件/文件夾。這是唯一有效的解決方案 - Pierluigi
當命令行內容失敗時,7zip嘗試失敗,這對我有用。甚至微軟的支持都難倒了! - Kit Ramos
同樣在這裡 - 我開始用7zip刪除文件,但它也很奇怪,我不得不連續多次Shift + Delere每個目錄實際刪除它,但後來我嘗試了這個工具,並像一個魅力一樣工作。啟動它兩次以擺脫所有文件。謝謝! - Artanis
謝謝,對我來說也是唯一可行的解​​決方案,太棒了!!!! - tim


Cygwin的 rm -rf 在長路上運作良好!


24
2017-09-26 19:40



Cygwin完美地為我工作!剛做了-rm -rf,所有文件都被刪除了。 - Ranhiru Cooray
在GNU bash版本4.1.10(4)下也為我工作 - 發布 - rjzii
從Git Bash命令窗口運行時工作得很好。我為此安裝了GitGui。 - Albo Best


無需安裝其他軟件即可使用 subst 命令臨時為長命名目錄創建別名。

例如如果要刪除文件夾 C:\Very long directory\that exceed\length limit\blah blah blah\abcde\folder to be deleted 你可以使用該命令

subst x: "C:\Very long directory\that exceed\length limit\blah blah blah\abcde"

然後你可以刪除 X:\folder to be deleted 在Windows資源管理器或命令提示符輕鬆。要刪除臨時驅動器號別名,請使用該命令

subst x: /d

24
2017-10-28 06:09



我嘗試了所有其他答案(包括其他類似問題的答案),這是唯一最終為我工作的答案。它是迄今為止最快的。 - glenneroo
這是迄今為止最好的答案:簡單的內置功能,沒有與註冊表混亂。應該是公認的答案。 - Kevin Roche
很簡單,最簡單,最直接的方法,謝謝Kenneth。 - Seth


通過以下運行從Powershell進入命令:

Cmd /C "rmdir /S /Q <dir>" 

21
2018-04-22 16:00



“該目錄不為空”。哎呀。 OP想要刪除非空文件夾。 - leye0
這與@herms的答案有什麼不同? - bigbadmouse


Dentrasi的解決方案 是最適合我的,但我想在頂級答案中發布具體步驟。

  1. 下載並安裝最新的穩定版本 7zip的
  2. 運行7zip文件管理器(7zfm.exe)。
  3. 在7zip文件管理器中,導航以便您可以看到要刪除的文件夾的名稱(即您在父文件夾中)。
  4. 按住Shift鍵。
  5. 點擊 ”刪除“按鈕,在鍵盤上或7zip文件管理器工具欄中; 確保你仍然按住Shift鍵
  6. 點擊 ”“按鈕; 確保你仍然按住Shift鍵

17
2018-06-25 14:19



很好的嘗試,但仍然沒有為我的10's k的遞歸文件夾。只有rimraf工作。 - Julian Knight
@JulianKnight:是的,這種方法也沒有在100%的時間里為我工作。我只是想提一下,因為它是更直接的過程之一,而且它至少在部分時間內起作用。我發現100%有時間工作的唯一事情是Powershell + NTFSSecurity模塊腳本方法,我將在下面介紹。 IIRC rimraf在被叫時失敗了,這就是我最初陷入困境的原因。有關詳細信息,請參閱此Node.js線程: github.com/nodejs/node-v0.x-archive/issues/... - Mass Dot Net
是的,總會有這樣的問題。事實上,這是Arduino IDE的庫安裝代碼(Java),我不小心選擇了包含庫的文件夾作為文件夾來安裝和關閉庫!我一實現就已經殺了這個過程,但已經有了10個k的文件夾(該死的i7 / SSD!)NPM的下一個主要版本旨在幫助解決Node的許多深層庫安裝問題,因為應該從一個更扁平的結構。我真的很高興有人把我帶到rimraf - 簡單而自由。 - Julian Knight
@JulianKnight - 是的,一兩天前有人告訴我npm3應該通過阻止深度嵌套的依賴文件夾結構來幫助緩解這些問題。 - Mass Dot Net
不知道它是否“阻止”但是它確實更合理地處理嵌套依賴項,因此如果您的主應用程序需要庫X v1.0而庫Y需要Z也需要X v1.0,則將使用頂級庫。目前Z將安裝自己的X版本。 - Julian Knight