在目录中删除非常长的路径

7

我有一个非常奇怪的问题,与我的ant构建所创建的文件夹结构有关,它创建了这样一种文件夹结构:C:helper/class/helper/class/helper/class等等,继续很长时间。

我想知道是否有一些脚本可以在Windows 7上使用cmd删除这些文件夹。

我已经尝试过:

rmdir /s /q

除了尝试使用:

robocopy "C:helper/class/helper/class/helper/class" C:Test

但是我还是没有运气...

有人有什么建议或脚本可以用于递归删除这个结构吗?


使用普通的删除过程,您遇到了什么错误? - Chelseawillrecover
@Chelseawillrecover 文件名太长了...我尝试逐个浏览文件夹并将其变成 a/a/a/a/a/a/a/helper/class/helper/class,但是没有成功...我看到有人建议将中间文件夹移动到桌面上并删除较短的高层结构,但这似乎需要很长时间。 - koala421
我想问的是,如果您删除顶级根文件夹,会出现什么错误?我假设您想要删除整个文件夹? - Chelseawillrecover
"C:" 后面应该加上反斜杠。此外,大多数 Windows 命令都使用反斜杠("") 作为路径分隔符,而不是正斜杠("/")。因此,正确的命令应该是:rmdir /s /q C:\helper\class\helper\class\helper\class - Chad Nouis
7个回答

14

尝试

 robocopy /e /b /purge c:\empty c:\folder-to-delete

1
可能更有用的是解释一下。这对我有用,但为了让其他可能没有听说过Robocopy的人受益。 - Andrew S
1
非常好用,只需要先创建 c:\empty - Mark Richman
你最好只是走到目录树的中间,然后将其剪切到 C:\,而不是使用这个。所有这个所做的就是移动文件夹,如果文件夹内容仍然太长,你仍然会遇到问题。 - Kelly Bang
1
@KellyBang,“/purge”选项会删除目标文件夹内的所有内容,并且在我测试的路径长度达到约8000个字符时仍然有效。 - Harry Johnston
@HarryJohnston 当然,它是将空文件夹复制到要删除的文件夹中,并删除源目录中不再存在的内容(空文件夹)?我以为它是反过来的。这样更有意义。 - Kelly Bang

10

delrmdir命令无法删除名称过长的文件夹。但是7-Zip可以!右键单击要删除的文件夹。在7-Zip上下文菜单中选择“添加到压缩文件”,并在“添加到压缩文件” 7-Zip对话框中设置“压缩后删除文件”选项。 7-Zip会创建归档文件并删除具有长路径的文件夹!之后,您可以删除归档文件。

enter image description here


1
问题可能是由于Windows本身对路径长度的限制。大约有155个字符的限制1。在Java项目(甚至C#.NET项目)中创建这些非常长的路径非常容易。特别是如果您将项目放在类似于C:\ Documents and Settings \ Baron Van Hushoven \ Documents \ Projects \ My Project (长度为74个字符)之下的位置。

如果这是您的问题,则可能被迫使用Subst命令。这允许您创建表示另一个路径的驱动器号,然后您可以使用该驱动器号来帮助创建较短的路径。

C:\> subst x: "C:\Documents and Settings\Baron Van Hushoven\Documents\Projects\My Project"

现在,您可以将X:用作项目的根目录,这将缩短您尝试删除的路径长度74个字符,这可能足以使Windows能够访问这些文件。

1. 这个限制实际上是260,但是一旦你输入了C:\,你就只剩下255了。 讽刺的是,NTFS可以处理长达32K的路径,Windows也可以处理这些长名称。你可能可以在路径前面加上"\\?\" 如\?\C:\Documents ...` 不过,我不认为这在Windows资源管理器或命令行控制台中起作用。


Robocopy可以处理长路径。 - Harry Johnston
@HarryJohnston 看起来是 xcopy 的替代品。我以前从未听说过。谢谢。很高兴知道这个信息。 - David W.

1

我在Windows 7中使用内置的del命令获得了更多的成功。

我发现在某些情况下,del /s /q可以起作用,但rmdir /s /q则不行。


部分有效,已刪除259個字符的文件名,但265个字符未被删除。 - Kelly Bang

1
我用“FastCopy ver3.13”完成了此操作。
源 :路径过长的目录
目标:c:\x\
操作模式(下拉):全部删除(强制删除所有文件/目录)
执行了3次,我的问题解决了。 Robocopy、7zip对我都不起作用。

0

我是通过编程实现的,见下面的代码

public static void main(String[] args) throws Exception {

    // This "c:/e" folder contains more then 5000 inner folders with name 'e'.
    // Removing of these folders is slow.
    // It takes about 10 minutes to delete a single tail folder programmatically.
    // But we can arrange these folders to a flat structure with 100 sub-folders depth.
    File root = new File("c:/e");

    // This folder will have parts of the root folder
    File target = new File("c:/e2");
    target.mkdirs();
    int currentFolderNum = 0;

    // Walk to the last folder
    while (root.exists() && root.listFiles() != null && root.listFiles().length > 0) {
        if (root.listFiles().length > 0) {
            root = root.listFiles()[0];
        }
    }

    // Now the root folder is a tail of c:/e/e/...

    int numFolders = 0;
    int nextNumber = 0;
    int partSize = 99;
    while (root.getParentFile().getName().equals("e")) {
        File parentFile = root.getParentFile();
        if (numFolders++ == partSize) {
            File newFolder = new File(target, "f" + ++nextNumber);
            boolean renamed = root.renameTo(newFolder);
            log.info("Count: {}. Folder: {} Moved? {}", currentFolderNum, newFolder.getAbsolutePath(), renamed);
            if (!renamed) {
                System.exit(1);
            }
            numFolders = 0;
        }
        root = parentFile;
        currentFolderNum++;
    }
}

现在c:/e2文件夹中的所有文件夹都有短名称,可以使用TotalCommander或Windows Explorer删除。


0

安装cygwin并使用Unix命令rm -rf进行删除。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接