删除目录中的很长路径

时间:2013-12-11 15:47:04

标签: windows ant

我有一个非常奇怪的问题,我的ant构建创建了一个文件夹结构......它创建了一个文件夹结构,使得C:helper / class / helper / class / helper / class并持续很长时间时间。

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

我已经尝试过了:

rmdir /s /q

以及尝试使用:

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

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

有没有人有任何建议或脚本我可以用于bat文件以递归方式删除此结构?

7 个答案:

答案 0 :(得分:14)

尝试

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

答案 1 :(得分:9)

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

enter image description here

答案 2 :(得分: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也可以处理这些长名称。您可以在路径前添加"\\?\" as in \?\ C:\ Documents ...`但是,我认为它不适用于Windows资源管理器或命令行控制台。

答案 3 :(得分:1)

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

我看到del /s /qrmdir /s /q没有的情况下工作。

答案 4 :(得分:1)

我已经使用“ FastCopy ver3.13”完成了

source:长目录的路径

目的地:c:\ x \

操作模式(下拉):全部删除(强行删除所有文件/目录)

执行了3次,我的问题解决了。 robocopy,7zip对我不起作用。

答案 5 :(得分:0)

安装cygwin并使用unix命令rm -rf删除。

答案 6 :(得分: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资源管理器将其删除。