2009-02-15 160 views
58

將項目導入eclipse時,它以某種方式開始創建目錄的遞歸版本。如何在Windows中刪除長路徑。

現在,當我嘗試刪除任何內容時,我收到消息「您指定的文件名太長。」

我無法從命令行中刪除它。我無法從資源管理器中刪除它。我不能做任何事情。我不知道Eclipse創建了多少個副本。在我意識到有什麼錯誤之前,Eclipse正好運行了一分鐘,並且我取消了操作。

我可以得到頂級文件夾的屬性,它說它包含497個文件夾。

問題1:如何在Windows中刪除所有這些東西?

問題2:到底什麼是日食思維?

+0

啓動賞金希望更好/更容易/更快的解決方案。另外,有人修復日食,所以它會識別一個愚蠢的遞歸複製操作。 – 2011-02-02 21:32:12

+3

http://technet.microsoft.com/en-us/sysinternals/bb896768並將某些更深的文件夾映射到其他地方。或者在java中編寫4行函數並刪除它; \t`靜態無效cleanDir(文件目錄){ \t \t爲(文件f:dir.listFiles()){ \t \t \t如果(f.isDirectory()){ \t \t \t \t cleanDir(F); \t \t \t} \t \t \t f.delete(); \t \t} \t \t \t} ......提醒一個螞蟻任務可能也會這樣做? – bestsss 2011-02-07 23:23:42

+0

你有沒有試過從代碼中刪除它? – 2011-02-08 15:59:37

回答

19

我有一個類似於Eclipse的問題:試圖使用Subclipse導入項目,它生成了一組深度嵌套的目錄,我無法刪除。

我做了一些事情,首先我編輯目錄名稱到最短的可能長度(實際上我認爲這是毫無意義的)。其次,我儘可能深入遍歷目錄樹,然後剪切並粘貼分支(這可以刪除原始分支),然後重複該過程。

@Charlie和@ Tomalek的解決方案看起來像他們可能會更優雅。雖然我不打算重複這些經驗。

12

至於Q1)

使用SUBST到短cirquit的路徑:

subst Q: C:\very\long\path\created\by\eclipse 
Q: 
del *.* 

至於Q2)

龍路徑是較少在其他操作系統中的問題的,並有Windows API函數,可以處理超過255個字符的路徑,所以他們只是做到了,我想。

+1

我的目錄清單。 。 。 dirname - > dirname - > dirname - >。 。 。約500次。 我可以將「q」重新映射到它的任何部分,但是當我嘗試刪除「q」時,它具有相同的問題。 – Baltimark 2009-02-15 16:14:16

+1

然後繼續下一個驅動器號。看看這裏:http://stackoverflow.com/questions/236533/ – Tomalak 2009-02-15 16:54:15

+0

Ok tomalak,你說要繼續添加驅動器號,直到我得到一個足夠短的路徑刪除,然後「從底部刪除」,如果你願意。 與伊恩的思想類似。可能會更高效,更具時效性。謝謝。 – Baltimark 2009-02-17 15:31:17

-2

嘗試使用Unlocker。它用於殺死鎖定文件的進程,但我認爲它可以強制刪除f-up文件,就像你擁有的那樣。

+1

但是,此工具只刪除文件上的排他鎖。如果文件路徑太長,它無法提供幫助。 – Tomalak 2009-02-15 15:58:14

+1

對。沒有幫助。 – Baltimark 2009-02-15 16:10:49

+0

使用7Zip文件管理器。奇蹟般有效。 – Swanidhi 2015-01-22 15:39:47

10

如果您需要處理超過MAX_PATH的路徑,則必須使用Unicode版本的Windows文件API(例如DeleteFileW)並使用\\?\前綴。您可以使用這些API編寫一個簡短程序來枚舉這些目錄並將其刪除。

4

我遇到了同樣的問題,使用Eclipse ..!一個億的嵌套文件夾被創建,它佔用了超過500MB的空間!

我試過一噸的東西在窗戶並沒有什麼工作..

最後我使用Ubuntu剛剛重新啓動,並刪除了那個可怕的文件夾..就是這樣.. Ubuntu的似乎並不具有任何這樣的訪問限制基於Windows的文件路徑長度.. 使生活更容易..:)

154
robocopy empty_dir base_nested_dir /purge 

例子:如果你有時間太長,例如文件夾路徑:

D:\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles

按照下列指示將其刪除。

  1. 創建一個空文件夾,如C:\Users\Name\Desktop\temp
  2. 打開命令提示符窗口。
  3. 類型robocopy C:\Users\Name\Desktop\temp D:\BackupFolder /purge

注:如果在步驟3中任一路徑中有空格,該路徑必須用引號引起來圍封。

6

修復很簡單,免費!根本不需要重命名文件夾。

  1. 下載Cygwin這是免費的。

  2. 使用命令rm -f -r <folder-name>並稍等片刻。

我有一個文件夾的大小爲1.5 GB與無數的內部文件夾,它的工作!

3

以編程方式,您可以使用DeleteFileWRemoveDirectoryW刪除,並且將L"\\?\"添加到文件名。請注意,您必須使用W版本而不是A版本的API。

1

大聲笑我幾年前有一個類似的問題。由於一個錯誤,我創建了無限期的文件夾嵌套,直到文件名變得太長。

IIRC,我通過抓取文件夾結構以編程方式刪除它們。

4

this Windows Sysinternals forum post by maxaha1中提到的方法有效。

我建議你自上而下。只要你保持在同一個 卷(份額),你通常可以拖動上層目錄到 新的父母,而不考慮目錄的內容是 拖動(即和它可能有的長度/遞歸問題)。因此, 你可以將一個目錄放在你的問題路徑下面4或5個級別,然後將其拖動到根目錄下 。然後刪除現在只有 包含幾個級別的原始路徑。理想情況下,努力保持最長的路徑比250個字符(包括文件名)少 。我現在在 處進行系統遷移,並且我們有一些340+字符路徑的用戶,在不使用此方法的情況下不會使用 拷貝。我試過SUBST的,遞歸網使用的, 遞歸腳本,等等。不幸的是,用戶似乎能夠 創造的東西迷惑了最好的程序員,管理員等。

創建新的文件夾,並只需拖動從每個頂部向下拖放幾個文件夾(並刪除它們),直到您清理完所有文件夾。

-1

您可以使用 「Cygwin的」 使用命令 「RM --force --recursive PATH」 或短的 「RM -fr PATH」。

81

7Zip是最終的解決方案,如果你不熟悉命令行。

  1. 打開7Zip的文件管理器
  2. 瀏覽到您的文件
  3. 按住Shift鍵刪除文件

乾杯!

3

上面的人已經發布了對「rimraf」的引用,但讓我添加更多細節。如果您的系統上安裝了節點,那麼只需使用rimraf模塊(它可以安裝在您的路徑中)。這是迄今爲止在最不平凡的情況下刪除Windows系統上最簡單的方法。實際上,這並不是說rimraf太棒了,而是因爲Node.js在設備內核級別上處理文件系統。如果您查看Node的'fs'模塊源代碼,您將看到諸如this的代碼。從本質上講,Node.js處理文件系統比Git更好地處理Windows,即使在Windows上使用git clean -fdx時也不會刪除具有長路徑名的文件夾。

1

我對這裏和其他地方發佈的任何解決方案(robocopy,7zip,subst,shady spyware)並不滿意,所以我推出了我自己的小命令行工具。

它可以遞歸刪除文件或整個目錄。也許在將來我會添加更多選項。您可以從releases page page GitHub獲取該工具。

1

好吧,我試圖尋找一個解決方案,我發現最簡單的解決方案的一個Windows用戶

  1. 安裝Mobaxterm
  2. 打開mobaxterm。轉到您要刪除(使用CD)的目錄,然後運行以下命令

    RM -rf目錄名

所有的文件夾,子文件的Windows是抱怨刪除現在被刪除

0

它很煩人,2016年這個Linux在我們幾年前解決的時候還是呈現給我們Windows用戶的一個問題。當它在Java中很容易做時,它變得更加惱人。

我們應該使用Change.org來請求MS包含此能力。這不難。如果他們擔心向後兼容性,爲什麼不只有管理員可以打開或關閉的嚴格模式。至少給我們一個警告,然後讓我們刪除它。 GRRRRR [/咆哮]

如果您在您的機器上運行Java,你可能會發現這個代碼幫助:

import java.io.File; 

public class Delong { 

    public static void main(String[] args) { 
     File file = new File("F:\\YourDirectory\\YourFile"); 
     boolean result = deleteDirectory(file); 

     if(result) 
      System.out.println("Deleted"); 
     else 
      System.out.println("Failed"); 
    }//end main 

    /** 
    * Force deletion of directory 
    * @param path The path you want to delete 
    * @return True if it worked; 
    */ 
    static public boolean deleteDirectory(File path) { 
     if (path.exists()) { 
      File[] files = path.listFiles(); 
      for (int x = 0; x < files.length; x++) { 
       if (files[x].isDirectory()) 
        deleteDirectory(files[x]); 
       else 
        files[x].delete(); 
      }//end for 
     }///end if 
     return (path.delete()); 
    }//endDeleteDirectory 

}//end class 
-1

如果您已經安裝了您的系統,然後刪除該文件夾的簡單方法上git它的全部內容是打開一個gitbash窗口,然後運行這個命令。

$ rm -rf DeleteFolderName

1

MIR(反映一個完整的目錄樹)選項,在窗戶和網絡路徑爲我工作以及..

robocopy empty_dir <foldertobedeleted> /MIR

  • 只需創建一個空目錄,並告訴robocopy清除目標目錄中不在空目錄中的所有內容

輸出會是這樣..

enter image description here>