如何在Windows中删除长路径。

时间:2009-02-15 15:48:07

标签: windows eclipse path

将项目导入eclipse时,它以某种方式开始创建目录的递归版本。

现在,当我尝试删除任何内容时,我收到消息“您指定的文件名太长了。”

我无法从命令shell中删除它。我无法从资源管理器中删除它。我无法做任何事情。我不知道Eclipse创建了多少个副本。在我意识到出错之前,Eclipse运行了一分钟,我取消了操作。

我可以获取顶级文件夹的属性,它说它包含497个文件夹。

问题1:如何在Windows中删除所有这些内容?

问题2:日食是怎么回事?

20 个答案:

答案 0 :(得分:159)

答案 1 :(得分:85)

如果您对命令行不满意,7Zip是最终的解决方案。

  1. 打开7Zip文件管理器
  2. 导航到您的文件
  3. Shift - 删除文件
  4. 干杯!

答案 2 :(得分:19)

我遇到了与Eclipse类似的问题:尝试使用Subclipse导入项目,它生成了一组深度嵌套的目录,我无法删除。

我做了几件事,首先我将目录名称编辑到尽可能最短的长度(实际上我认为这是毫无意义的)。其次,我尽可能深地遍历目录树,然后剪切并粘贴分支(这使得删除原始分支成为可能),然后重复该过程。

@Charlie和@ Tomalek的解决方案看起来可能更优雅。我不打算重复这些经验来发现。

答案 3 :(得分:12)

至于Q1)

使用subst来缩短路径:

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

至于Q2)

长路径在其他操作系统中不是问题,并且有可以处理长度超过255个字符的路径的Windows API函数,所以他们只是这样做了,我想。

答案 4 :(得分:10)

如果您需要处理超过MAX_PATH的路径,则必须使用Unicode版本的Windows文件API(例如DeleteFileW)并使用\\?\前缀。您可以使用这些API编写一个简短的程序来枚举这些目录并删除它们。

答案 5 :(得分:7)

修复简单而且免费!根本不需要重命名文件夹。

  1. 免费下载Cygwin

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

  3. 我有一个大小为1.5 GB的文件夹,里面有很多内部文件夹,它有效!

答案 6 :(得分:4)

我使用eclipse遇到了同样的问题..!创建了数以亿计的嵌套文件夹,它占用了超过500MB的空间!!!!

我在Windows中尝试了很多东西但没有任何效果。

最后我刚刚使用ubuntu重新启动并删除了那个可怕的文件夹..就像那样.. ubuntu似乎没有任何基于文件路径长度的访问限制,因为Windows确实如此。 让生活变得更轻松.. :)

答案 7 :(得分:4)

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

  

我建议你自上而下。只要你保持不变   卷(共享),通常可以将上层目录拖动到   新的父母,不考虑目录的内容   拖动(即。和它可能有的长度/递归问题)。所以   你可以在你的问题路径上找到4或5级的目录   将其拖到根目录。然后删除现在的原始路径   包含几个级别。理想情况下,努力保持最短的路径   超过250个字符(包括文件名)。我正在进行系统迁移   那一刻,我们有一些用户拥有340多条char路径,而不是   没有这种方法的复制。我已尝试过subst,递归网用,   递归脚本等。不幸的是,用户似乎能够   创造令最好的程序员,管理员等感到困惑的东西。

创建新文件夹,然后每次从顶部向下拖放几个文件夹(并删除它们),直到清理完所有文件夹为止。

答案 8 :(得分:4)

前三个回复显然是垃圾邮件(对于付费软件演示)。如果您想要一个免费的一键式解决方案,请参见此处:

http://www.osmstudios.com/Display.asp?Page=pathtoolong

可能在这个帖子中使用了3行Java。

-fm

答案 9 :(得分:3)

以编程方式,您可以使用DeleteFileWRemoveDirectoryW进行删除,并将L"\\?\"添加到文件名之前。请注意,您必须使用W版本而不是A版本的API。

答案 10 :(得分:3)

上面的人已经发布了对“rimraf”的引用,但是让我添加更多细节。如果您的系统上安装了Node,那么只需使用rimraf模块(它可以安装在您的Path上)。到目前为止,这是在最简单的情况下删除Windows系统上的东西的最简单方法。实际上,rimraf并不是很棒,因为Node.js在设备内核级别处理文件系统。如果你查看Node的'fs'模块源代码,你会看到this之类的代码。本质上,Node.js处理文件系统比甚至Git for Windows都要好得多,即在Windows上使用git clean -fdx时不会删除具有长路径名的文件夹。

答案 11 :(得分:1)

大声笑,几年前我遇到过类似的问题。由于一个错误,我创建了无限期的文件夹嵌套,直到文件名太长。

IIRC,我通过抓取文件夹结构以编程方式删除它们。

答案 12 :(得分:1)

MIR(镜像一个完整的目录树)选项也适用于Windows和窗口网络路径..

  

robocopy empty_dir <foldertobedeleted> /MIR

  • 只需创建一个空目录,并告诉robocopy清除目标目录中不在空目录中的所有内容

输出就像这样..

enter image description here&GT;

答案 13 :(得分:1)

我对此处和其他地方(robocopy,7zip,subst,shady间谍软件)发布的任何解决方案都不满意,所以我推出了自己的小命令行工具。

它可以递归删除文件或整个目录。也许将来我会添加更多选项。

该工具名为SuperDelete,您可以从releases page page GitHub获取该工具。

答案 14 :(得分:1)

好的,我尝试为此寻找解决方案,我找到了一个最简单的Windows用户解决方案

  1. 安装Mobaxterm
  2. 打开mobaxterm。转到要删除的目录(使用cd)并运行以下命令

    rm -rf directoryname

  3. 现在将删除Windows抱怨删除的所有文件夹,子文件夹

答案 15 :(得分:0)

我遇到了类似的问题,使用 7-zip(第三方软件)帮助了我。

  • 安装 7-zip https://www.7-zip.org/
  • 打开“7-zip 文件管理器”
  • 使用它,导航到您的文件夹并将您要删除的文件/文件夹的名称更改为一个简单的名称。
  • 使用 Shift + Del 删除文件/文件夹(这可能会使您免于在回收站遇到同样的问题,这可能会再次失败)

答案 16 :(得分:0)

令人讨厌的是,在2016年,当Linux解决了这个问题时,这仍然给我们Windows用户带来了一个问题。当它在Java中很容易做到时,它变得更加烦人。

我们应该使用Change.org请求MS包含此功能。它可能很难。如果他们担心向后兼容性,为什么不能只使用管理员可以打开或关闭的严格模式。至少给我们警告,但然后允许我们删除它。 GRRRRR [/ rant]

如果您在计算机上运行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

答案 17 :(得分:-1)

如果您的系统上已经安装了git,那么删除文件夹及其所有内容的简单方法是打开gitbash窗口,然后运行此命令。

$ rm -rf DeleteFolderName

答案 18 :(得分:-1)

您可以将“Cygwin”与命令“rm --force --recursive PATH”或短“rm -fr PATH”一起使用。

答案 19 :(得分:-2)

尝试使用Unlocker。它用于杀死持有文件锁的进程,但我认为它可以像你一样强制删除f-ed文件。