我有一个非常奇怪的问题,我的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文件以递归方式删除此结构?
答案 0 :(得分:14)
尝试
robocopy /e /b /purge c:\empty c:\folder-to-delete
答案 1 :(得分:9)
del 和 rmdir 命令无法删除具有长名称的文件夹。但是7-Zip可以!右键单击应删除的文件夹。在7-Zip上下文菜单中选择“添加到存档”,并在“添加到存档”7-Zip对话框中设置“压缩后删除文件”选项。 7-Zip创建存档文件并删除长路径的文件夹!之后,您可以删除存档文件。
答案 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 /q
在rmdir /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资源管理器将其删除。