如何在Windows中删除一个长path。
将项目导入eclipse时,它开始创build目录的recursion版本。
现在,当我尝试删除任何内容时,我收到消息“您指定的文件名太长”。
我无法从命令行中删除它。 我不能从资源pipe理器中删除它。 我不能做任何事情。 我不知道Eclipse创build了多less个副本。 Eclipse在运行了一分钟之后,才意识到出了什么问题,于是我取消了操作。
我可以得到顶级文件夹的属性,它说它包含497个文件夹。
问题1:如何在Windows中删除所有这些东西?
问题2:日食在想什么?
我有一个和Eclipse类似的问题:试图使用Subclipse导入一个项目,它生成了一个深层嵌套的目录,我无法删除。
我做了一些事情,首先我编辑了目录名称,尽可能短(实际上我认为这是毫无意义的)。 其次,我遍历目录树尽可能深,然后剪切和粘贴分支(这使得有可能删除原来的分支),然后重复该过程。
@Charlie和@ Tomalek的解决scheme看起来可能更优雅。 虽然我不打算重复这些经验。
robocopy empty_dir base_nested_dir /purge
例如:如果您的文件夹path太长,例如:
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
按照这些说明删除它。
- 创build一个空文件夹,如
C:\Users\Name\Desktop\temp
。 - 打开命令提示符窗口。
- 键入
robocopy C:\Users\Name\Desktop\temp D:\BackupFolder /purge
注意:如果步骤3中的任一path中有空格,则path必须用引号括起来。
7Zip是最终的解决scheme,如果你不习惯命令行。
- 打开7Zip文件pipe理器
- 导航到您的文件
- Shift-删除你的文件
干杯!
至于Q1)
使用subst来短路path:
subst Q: C:\very\long\path\created\by\eclipse Q: del *.*
至于Q2)
长path在其他操作系统中的问题不大,而且有Windows API函数可以处理超过255个字符的path,所以他们只是做了,我想。
如果您需要处理比MAX_PATH
更长的path,则必须使用Windows文件API的Unicode版本(例如DeleteFileW
)并使用\\?\前缀。 您可以使用这些API编写一个简短的程序来枚举这些目录并将其删除。
修复很简单,免费! 根本不需要重命名文件夹。
-
免费下载Cygwin 。
-
使用命令
rm -f -r <folder-name>
并等待一会儿。
我有一个大小为1.5 GB的文件夹,里面有很多内部文件夹,它工作正常!
我遇到了同样的问题使用Eclipse ..! 一个亿的嵌套文件夹被创build,它占用了超过500MB的空间!
我在Windows中尝试了一大堆东西,没有任何工作。
终于我刚刚重新启动使用Ubuntu和删除那个可怕的文件夹..就这样.. Ubuntu的似乎没有任何这样的访问限制基于文件path的长度,因为窗户..使生活变得更容易.. 🙂
前三个回复显然是垃圾邮件(对于一个付费软件演示)。 如果你想要一个免费的一键式解决scheme,请看这里:
http://www.osmstudios.com/Display.asp?Page=pathtoolong
这可能从这个线程进一步使用3行Java。
-调频
在这个Windows Sysinternals论坛上提到的方法maxaha1工作。
我build议你自上而下。 只要你保持在相同的体积(份额),你通常可以拖动上层目录到新的父母,而不考虑被拖动目录的内容(即。和它可能有的长度/recursion问题)。 所以,你可以将一个目录放在你的问题path下面4到5级,然后把它拖到根目录下。 然后删除现在只包含几个级别的原始path。 理想情况下,努力保持最长的pathless于250个字符(包括文件名)。 我正在做一个系统迁移,我们有一些用户有340多个字符path,不用这种方法复制。 我已经尝试了subst的recursionnetworking使用,recursion脚本等。不幸的是,用户似乎能够创造的东西,迷惑最好的编码,pipe理等。
创build新的文件夹,只需拖放,每次从顶部向下拖动几个文件夹(并删除它们),直到完全清理完为止。
以编程方式,您可以使用DeleteFileW和RemoveDirectoryW
进行删除,并将L"\\?\"
预先添加到文件名中。 请注意,您必须使用W版本而不是A版本的API。
上面的人已经发布了“rimraf”的参考,但让我添加更多的细节。 如果您的系统上安装了Node,那么只需使用rimraf模块(它可以安装在您的path上)。 这是在最不平凡的情况下删除Windows系统上最简单的方法。 实际上,这并不是说rimraf太棒了,而是因为Node.js在设备内核级别处理文件系统。 如果您查看Node的“fs”模块源代码,您将看到如此的代码。 从本质上讲,Node.js处理文件系统比Git更好,即使Windows也使用git clean -fdx,它不会删除具有长path名的文件夹。
大声笑我几年前有一个类似的问题。 由于错误,我创build了无限的文件夹嵌套,直到文件名变得太长。
IIRC,我通过爬行通过文件夹结构以编程方式删除它们。
好吧,我试图寻找一个解决scheme,我发现了Windows用户的最简单的解决scheme之一
- 安装Mobaxterm
-
打开mobaxterm。 转到要删除的目录(使用cd)并运行以下命令
rm -rf目录名
所有窗口抱怨删除的文件夹,子文件夹将被删除
我对这里和其他地方发布的任何解决scheme(robocopy,7zip,subst,shady spyware)并不满意,所以我推出了自己的小命令行工具。
它可以recursion地删除文件或整个目录。 也许在将来我会添加更多选项。
该工具称为SuperDelete ,您可以从发布页面GitHub中获取它。
MIR
(镜像一个完整的目录树)选项为我工作在窗口和窗口networkingpath以及..
robocopy empty_dir <foldertobedeleted> /MIR
- 只需创build一个空目录,然后告诉robocopy清除目标目录中不在空目录中的所有内容
输出会是这样的..
>
它很烦人,2016年这个Linux在我们几年前解决的时候还是给我们带来了Windows用户的一个问题。 当它在Java中很容易做时,它变得更加恼人。
我们应该使用Change.org来请求MS包括这个能力。 这不难。 如果他们担心向后兼容性,为什么不能有一个严格的模式,pipe理员可以打开或closures。 至less给我们一个警告,然后让我们删除它。 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
你可以用命令“rm –force –recursive PATH”或简称“rm -fr PATH”来使用“Cygwin”。
如果您的系统上已经安装了git
,那么直接删除文件夹及其所有内容的方法是打开gitbash
窗口,然后运行此命令。
$ rm -rf DeleteFolderName
尝试使用解锁器 。 它用于杀死进程locking文件,但我认为它可以强制删除f-up文件,就像你有。