我们的构建过程会创建许多临时文件(许多WSDL)。我们的ant脚本可以在进行清理时以某种方式删除它们,但是有时我需要删除workarea目录(所有临时文件所在的目录),而实际上并未从ant进行完全清理。这个问题也有同样的错误,但是由于我正在处理目录而不是文件,因此那里的答案对我而言实际上不起作用,而且我并不总是知道导致问题的具体文件或子目录是什么。而且,我尝试避免进行任何手动操作(除了触发单个命令以外)来真正删除它们。 >
Cannot delete [file name]: The file name you specified is not valid or too long.
Specify a different file name
在powershell中尝试
Remove-Item
会出现以下错误:错误而不必手动查找问题文件并移动/重命名它们?#1 楼
使用7-Zip文件管理器删除它们。如果仍然遇到问题,请确保在7-Zip文件管理器中使用Shift + Delete。否则,Windows尝试将它们移到回收站(这将再次失败)。
评论
谢谢-这摆脱了一个dir树,该树有点递归并且太深,无法删除del / rmdir / rm / explorer
–马丁·贝克特(Martin Beckett)
2010年8月24日15:47
使用shift + Del效果很好-7zip无法将长路径文件发送到回收站...。
–科里
2011-3-2在3:44
+1 7zip。您必须导航到该文件夹,然后像@cori一样使用shift + Del。如果从上下文菜单中选择“删除”选项,它将在此失败。 Shift + Del吧!
– Urda
2012年6月20日在21:25
7zip不适用于win7 64,所以linux可以。
–埃里克·弗里森(Erik Friesen)
2014年5月15日在20:09
我赞成,因为使用7zip可以删除还删除其中包含长嵌套文件夹的文件夹。我的node_module文件夹出现问题,其中包含大量的嵌套文件夹,但我无法将其删除。从基础文件夹中完美无缺地修复了7zip。 +1
– Gruber
2014年10月13日23:33
#2 楼
这里没有其他(免费)答案对我有用,但是我在另一个站点上找到了一个答案:rimraf <dir>
rimraf是一个Node.js程序包,因此您将需要安装包含npm的Node.js。然后,您可以运行:
npm install -g rimraf
然后您可以从命令行运行
rimraf
。我发现了此解决方案,因为npm本身是造成此问题的原因问题是由于它嵌套依赖项的方式引起的。
,
rimraf
从UNIX命令rm -rf
中获取名称,该命令递归删除文件和文件夹。评论
尝试了很多方法。这只是完美的工作!
–鸭蛋
2015年11月17日下午13:14
最好的答案:)是的,很容易
– Al-Muthafar
2015年12月8日,12:47
这应该是公认的答案。
– NINCOMPOOP
16 Mar 10 '16 at 6:44
您的解决方案有效,但是实在太麻烦了,以至于我必须使用节点js模块删除节点js模块文件夹...我不想再生活在这个星球上
–Benoit P
16-09-23在10:04
Node首先为我创造了这个问题,所以……有趣的……他们也有解决方案。
– Eric J.
16-9-27在16:43
#3 楼
无需安装任何程序即可解决此问题。使用
robocopy
可以轻松解决此问题,该问题自2006年推出Windows Vista以来就已预装。无需使用7zip或任何其他第三方工具。 Powershell是一个过大的杀伤力。 Cygwin可能可以工作,但是您可能未安装它。因此,我们将重点放在rmdir /S /Q <dir>
,这个想法是
使用
robocopy
从新的空文件夹复制并更新
到
执行
robocopy
后,目标目录也将为空。这些说明适用于命令行。只需在Windows中打开搜索,键入
robocopy
并按Enter。我们要删除的目标是: :
首先创建一个空目录,fi
cmd
。C:\delete\this folder\with a very long name
使用选项
C:\emptyfolder
mkdir C:\emptyfolder
删除空目录。您不再需要它。
robocopy c:\emptyfolder "C:\delete\this folder\with a very long name" /purge
由于源目录(
/purge
)中没有文件或文件夹,它只是删除文件并最终目标目录(C:\emptyfolder
)下的文件夹/>通过将文件夹从资源管理器窗口拖放到Terminal / cmd窗口中。
注意:删除的文件不会进入回收站文件夹!一旦删除,文件将无法恢复。
(来自BVLANGEN的“路径太长?使用Robocopy”)
PS:我意识到这个答案在这里,而没有那么讲究。如何在Windows中删除文件名过长的文件? [重复]
添加的特性:
您可能需要多次执行此过程才能删除所有文件。
评论
谢谢你,先生!这应该是一个可以接受的答案,因为所有其他答案都不起作用或需要第三方工具。 :)
– MickyD
16 Dec 23'0:44
这很完美...不需要安装任何东西(据我所知),而且速度很快。这应该是公认的答案!
–苦参碱
17年1月6日在17:01
这样会将部分(或全部)目录树保留在“ c:\ deletefolder”(目标目录)下。无论如何,我一瞬间删除了所有内容(猜测文件很小),而我只需要手动
–rld。
17年1月15日13:45
处理高度递归的目录时,此选项比7zip慢得多。等待20分钟后,我对它们进行了基准测试并实现了7zip,尽管并没有显示进度快了50倍。
–安迪·格格(Andy Gauge)
18年8月22日在22:25
我同意@MickyD:这应该在顶部,作为公认的答案!我现在通常使用我的“指定的空目录”:robocopy C:\ Users \
– Flandraco
2月28日17:55
#4 楼
我相信我已经找到一种从cmd
删除内容的方法。最初,我尝试使用del
命令,但这没有用。然后我想起了rmdir
。请执行以下操作:rmdir /S /Q <dir>
似乎奏效了。
评论
没为我工作。 :(
–安德鲁·阿诺特(Andrew Arnott)
2010-12-26 1:20
在尝试运行rmdir之前,请记住先放入cmd。
–brianpeiris
2012年7月13日在13:16
对于无法使用此解决方案的用户,我有一个对我有用的替代解决方案(路径/文件名太长):将文件/目录移动到C:\以缩短路径,然后从那里删除。
– Anders SandbergNordbø
2013年9月16日上午10:38
7-Zip可能会删除该解决方案无法使用的目录。我只是发生在我身上。
– SamStephens
13年12月18日在16:07
此解决方案获得不一致的结果。拜托,不要投票。
–教父
16-09-13在0:09
#5 楼
遇到此问题时,我使用的工具是FastCopy。我从下拉菜单中选择了全部删除,选择了要删除的目录,然后单击全部删除。FastCopy是可移植的(不需要安装),有32位和64位版本。
评论
如果您正在寻找命令行工具,则可以使用我在GitHub(github.com/epsitec/Tools-RecursiveDelete)上发布的一个小工具。
–皮埃尔·阿尔诺(Pierre Arnaud)
2015年3月27日在6:10
我有一组递归生成的嵌套文件/文件夹。这是唯一可行的解决方案
–皮尔路易吉(Pierluigi)
15年11月26日在13:15
当命令行内容失败,7zip尝试失败时,这对我有用。甚至微软的支持也陷入困境!
– Kit Ramos
16 Mar 25 '16 at 4:02
同样在这里-我有点开始使用7zip删除文件,但是它也表现得很奇怪,我不得不连续Shift + Delere连续多次删除每个目录才能真正将其删除,但是后来我尝试了此工具,就像一个魅力一样。启动它两次以清除所有文件。谢谢!
– Artanis
16年5月30日在20:47
谢谢,对我来说,也是唯一可行的解决方案,很棒!!!
–蒂姆
16年6月12日在11:27
#6 楼
无需安装其他软件,您可以使用subst
命令临时为长命名目录创建别名。例如如果要删除文件夹
C:\Very long directory\that exceed\length limit\blah blah blah\abcde\folder to be deleted
,可以使用命令subst x: "C:\Very long directory\that exceed\length limit\blah blah blah\abcde"
,然后可以在Windows资源管理器或命令提示符下轻松删除
X:\folder to be deleted
。要删除临时驱动器号别名,请使用命令subst x: /d
评论
我尝试了所有其他答案(包括其他类似问题的答案),这是唯一为我工作的答案。它是迄今为止最快的。
– Glenneroo
17年5月26日在12:54
到目前为止,这是最好的答案:简单的内置功能,不会使注册表混乱。应该是公认的答案。
–凯文·罗氏(Kevin Roche)
17年9月12日在15:01
最简单,最简单的方法,谢谢肯尼斯。
–赛斯
18年6月13日在16:25
嗯,这个答案吓到我了,因为我实际上有一个X:驱动器。这里没有足够的信息,我不建议人们在没有进一步解释的情况下关注此信息。
–qodeninja
19年9月9日在2:31
这种方法有效,但更麻烦的是,如其他答案所述,使用7zip或robocopy实际上更容易。
– davidbak
4月18日下午3:02
#7 楼
Cygwin的rm -rf
在很长的路途上都能很好地工作!评论
Cygwin为我完美地工作了! -rm -rf和所有文件都被删除了。
–Ranhiru Jude Cooray
14-10-23在4:42
在GNU bash版本4.1.10(4)-发行版中也为我工作
–匿名
2015年9月22日4:13在
从Git Bash命令窗口运行时效果很好。我已经为此安装了GitGui。
–user635807
16年8月30日在15:48
#8 楼
只需通过运行以下命令从Powershell进入命令:Cmd /C "rmdir /S /Q <dir>"
评论
“目录不为空”。哎呀。 OP希望删除一个非空文件夹。
–leye0
16-4-23在23:19
这和@herms的答案有什么不同?
–bigbadmouse
18/09/11在10:22
#9 楼
Dentrasi的解决方案最适合我,但我想在顶级答案中发布具体步骤。下载并安装最新的稳定版7zip。
运行7zip文件管理器(7zfm.exe)。
在7zip文件管理器中,进行导航,以便可以看到要删除的文件夹的名称(例如,您位于父文件夹中)。
按住Shift键。
在键盘上或7zip文件管理器工具栏中单击“删除”按钮;确保您仍然按住Shift键。
单击“确定”按钮;确保您仍然按住Shift键。
评论
不错的尝试,但对于递归文件夹的10的k仍然对我不起作用。只有rimraf有效。
–朱利安·奈特(Julian Knight)
2015年9月11日下午16:40
@JulianKnight:是的,这种方法也没有100%地对我有用。我只想提及它,因为它是更简单的过程之一,并且至少在部分时间内有效。我发现,唯一有效的方法是100%的时间是Powershell + NTFSSecurity模块脚本方法,下面将对此进行介绍。 IIRC rimraf在被调用时失败了,这就是我一开始就陷入困境的方式。有关详细信息,请参见此Node.js线程:github.com/nodejs/node-v0.x-archive/issues/…
–质点网
2015年9月14日下午5:38
是的,总会有这样的问题。实际上,是我在(Java)中使用了Arduino IDE的库安装代码,我无意中选择了包含库的文件夹作为文件夹来安装一个库。我一意识到我就终止了该过程,但是已经有了10个文件夹(千个i7 / SSD!)。NPM的下一个主要发行版旨在帮助解决Node的许多深层库安装问题,因为应该满足依赖关系。更扁平的结构。不过,我还是很高兴有人将我带到rimraf上-轻松又免费。
–朱利安·奈特(Julian Knight)
2015年9月18日在8:22
@JulianKnight-是的,在一两天前有人告诉我,npm3应该通过防止深度嵌套的依赖项文件夹结构来减轻这些问题。
–质点网
15年9月27日在21:38
不知道它是否可以“预防”,但确实可以更明智地处理嵌套的依赖项,因此,如果您的主应用程序需要库X v1.0,而库Y需要Z也需要X v1.0,则将使用顶级库。目前,Z将安装自己的X版本。
–朱利安·奈特(Julian Knight)
2015年9月28日14:00
#10 楼
现有答案中还没有提到两件事。您可以使用扩展长度路径前缀来访问长路径
对于Windows 10,您可以启用以下功能的长路径支持一般用途-但是请注意,并非所有应用程序都可以使用长路径运行,因此应测试较旧的软件。只有带有适当清单条目的软件才能使用此功能。
长路径前缀
Windows API具有特殊功能,支持最大32k的Unicode路径名字符长(每个元素的长度最多为255个字符)。
这通常被误称为UNC命名,但与之无关。
用来告诉API使用长Unicode路径的前缀是
\?\
,如下所示:\?\D:\very long path
当引用形式为
\servername\path name\file name
的远程服务器上的路径时,通常使用UNC名称。您可以将其与长路径前缀结合使用,以便:\?\UNC\server\share
请注意,某些应用程序虽然写得不好,但很不幸的很常见,它们不支持UNC文件路径,也不支持长路径前缀。
参考:https://msdn.microsoft.com/zh-CN/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath
长路径支持
此选项已添加到Windows 10的最新版本中。在编写本文时,默认情况下未激活此选项,因为它需要特定的应用程序支持。有趣的是,PowerShell具有内置的支持,因此启用此选项将允许长路径直接在PowerShell脚本中使用。
如果具有Windows版本,则可以通过组策略编辑器将其激活。或者,您可以简单地使用以下注册表更改。与往常一样,请先备份要更改的注册表部分,然后再执行任何操作。
运行
regedit.exe
。确认UAC提示符。
导航到键:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy Objects\{48981759-12F2-42A6-A048-028B3973495F}Machine\System\CurrentControlSet\Policies
创建或更改密钥
LongPathsEnabled
。如果不存在,请右键单击“策略”,然后从菜单中选择“新建”>“ Dword(32位)值”。
将
LongPathsEnabled
设置为1
以启用。任何具有适当清单的应用程序条目现在将可以访问POSIX标准长路径。这应该包括Windows Store应用。
参考:https://blogs.msdn.microsoft.com/jeremykuhne/2016/07/30/net-4-6-2-and-long-paths -on-windows-10 /
更新2017-04-09
@maoizm指出了上面的注册表项存在的问题,因此我做了一些更深入的研究。看来您现在可以使用系统密钥设置长文件名支持:
HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)
这仍然仅适用于专门设置为使用文件名的应用程序(需要输入在应用程序的manifest.xml中)。
您还应注意,此方法不能使用相对路径名。
评论
{48981759-12F2-42A6-A048-028B3973495F}注册表路径的机器部分在每台计算机上都将有所不同-可能对每个人来说都不是很明显
– maoizm
17年4月5日13:00
@maoizm-好的,谢谢您强调这一点。如果使用W10周年更新或更高版本,请查看我的更新以作为替代。
–朱利安·奈特(Julian Knight)
17年4月9日在13:44
我正在编写一个名为FoundationIO的库,并且试图将长路径设置为默认值,是否可以设置任何函数或宏,以使我的库中的任何用户自动启用长路径支持?
– MarcusJ
18年4月4日在2:49
嗨,马库斯,这是本地Windows库吗?如果是这样,.NET具有作为相关Windows API一部分已提供的所需支持-抱歉,我不是.NET或Win API程序员,所以我不知道详细信息,但可以在MSDN上搜索这些详细信息。
–朱利安·奈特(Julian Knight)
18年6月8日在12:23
#11 楼
我喜欢cmd解决方案。尽管我想分享甚至仅在Explorer中也可以使用的另一种解决方法:尝试在删除之前缩短父文件夹的名称:较短的名称将缩短路径。说,您具有文件夹的树结构:C:\
..项目
.. ..春季一些很棒的项目2014
.. .. .. ..在城市公园里的某个星期五活动
...... Bla bla bla bla bla bla bla bla bla bla bla bla bla
..........实际文件名也很长
在这种情况下,您无法删除文件夹,也无法删除或重命名文件都没有。如果要删除整个文件夹结构或其中的一部分,可以临时重命名父文件夹并缩短路径,然后删除该文件夹。名称可以只是字母:
C:\
..项目
.. .. x
.. .. .. y
.. .. .. z
.. .. .. ...也有长名称的实际文件
就我而言,我只想删除包含许多子文件夹和文件的整个文件夹。所以我不在乎文件夹的名称。
评论
我编写了一个微型工具来完成此任务,并将其发布到GitHub。 github.com/epsitec/Tools-RecursiveDelete
–皮埃尔·阿尔诺(Pierre Arnaud)
2015年3月27日6:07
所有命令或Shift + DEL都不对我有用,但是可以。
–larkee
15年7月21日在12:35
当您有10个k的嵌套文件夹时,这实际上不起作用
–朱利安·奈特(Julian Knight)
2015年9月11日下午16:39
如果其中一个文件夹的名称很长(您也不能重命名有问题的文件夹),也无法使用。
–野牛
17年11月21日在12:06
#12 楼
7-zip解决方案效果很好。如果已安装git,则另一个选择是打开bash外壳并使用:rm -f
(或
rm -rf
用于文件夹)评论
对于初学者,请解释一下您如何在Windows中“打开bash外壳”?
– O.M.Y.
16-6-25在11:30
@ O.M.Y。您需要安装git。然后从开始菜单中可以打开git bash,或者如果在安装git时选择了扩展程序,则可以右键单击文件夹或在该文件夹上选择Git Bash。
–用户
16 Jun 25'11:36
#13 楼
我建议使用Total Commander(共享软件,但试用期过后仍可以使用最小的nag启动屏幕进行操作)。这就是我始终解决文件名过长问题的方法。
评论
感谢主我发现了这一点。删除node_modules文件夹时遇到问题,因为它决定愚蠢地嵌套目录。
–别名
14年8月14日在9:27
好吧,@ Alias,Total Commander使该问题更容易发现,至少对我而言。识别出此类问题后,chkdsk应该解决它。
– Sopalajo de Arrierez
14年8月14日在9:59
7.0版不起作用,它显示一条错误消息,并建议以管理员身份进行操作,该操作也会失败。
–izogfif
16年1月21日在15:36
@izogfif:今天的最新版本是8.52a。我会尝试这个。您没有提供有关错误消息的详细信息,但是可能在存档结构上存在一些不一致之处,必须使用“ chkdsk c:/ f”(假设驱动器C :)来解决(至少对于NTFS)。
– Sopalajo de Arrierez
16年1月22日,0:27
#14 楼
您也可以使用其等效的短名称删除它们。dir /x
将向您显示。#15 楼
我创建了一个简单的Java程序,该程序使用robocopy删除文件。该罐子是可运行的。如需其他输出,请从cmd行运行。https://drive.google.com/file/d/0B5pSEjxJvt_1WVp1T3puSm1CNjg/view?usp=sharing
评论
如果您不想使用Java,则可以使用我使用.NET(github.com/epsitec/Tools-RecursiveDelete)编写的此工具。
–皮埃尔·阿尔诺(Pierre Arnaud)
15年3月27日在6:09
@PierreArnaud非常有用。我需要类似这样的命令来实现命令行自动化。 @CamHart你也很出色!多谢你们!
– amitthk
17年1月20日在4:30
#16 楼
我已经尝试了所有其他答案,但是它们没有用(对我来说至少)。我遇到了delinfile,并且运行得很好而且非常快!
它的试用期仅限于3次操作/ 15天,但可以使用如果您只想删除一些文件夹/文件:
#17 楼
下载
使用带有RemoveDirectoryW的递归调用删除现有目录
使用自己的文件存储库对于新创建的目录
可以在删除包含目录之前将文件从目录中移出。
速度很快,尽管导航到目录顶部是单击每个嵌套目录
Windows XP(SP3)和up
没有安装程序的未签名非托管代码,因此从备用文件夹运行时可能出现智能屏幕警告,例如桌面。
CodeProject上的更多信息。
评论
请阅读“我如何推荐软件”以获取有关如何推荐软件的一些提示。您应该至少提供一个链接,有关该软件本身的一些其他信息,以及如何使用它来解决问题。
–DavidPostill♦
17年1月9日,12:38
@David:更好吗?链接非常有用,谢谢。
– Laurie Stearn
17年1月10日在10:35
#18 楼
我在Windows 10中遇到了这个问题,找到了一个简单的解决方案。深入文件夹树的深处。
从树的中间拖放一个文件夹使用地址栏移动到树的开始位置。
在我的图像中,将红色框拖放到绿色框。 (在这种情况下,路径较短,但对于较长的路径也可以使用)。
然后,路径变短,并使用Delete键正常删除。
#19 楼
在这里得到了完美的答案(对于文件)。在Windows 10中可以使用。REM Make sure there is no \ at the end of either path!
robocopy "C:\...\...\...\long\path" "C:\DeleteMe" "FileName" /MOV
REM Note: this ^ can be called many times before...:
REM Finally, recursively delete the higher up DeleteMe directory.
rmdir /S /Q DeleteMe
另请参见:https://msdn.microsoft.com/zh-cn/library/aa365247.aspx#maxpath
4个问题中没有一个单独的答案足以满足我的需求。欢迎世界。
#20 楼
我终于找到了如何通过Powershell做到这一点。这是我在Windows 7上运行时遵循的说明:在文件夹C:\ Users \ XXXX \ Documents \ WindowsPowerShell \ Modules \ NTFSSecurity中创建一个名为NTFSSecurity的新文件夹,其中XXXX是您的Windows用户名。示例:如果我的用户名是“ aspnyc”,则新文件夹将为C:\ Users \ aspnyc \ Documents \ WindowsPowerShell \ Modules \ NTFSSecurity。
下载文件系统安全PowerShell模块软件包-应该以简单的形式提供ZIP文件。
打开Powershell控制台,运行Get-Module -ListAvailable
,并确保NTFSSecurity出现在已注册模块列表中。
在Powershell控制台中,运行Import-Module。 NTFSSecurity。
在Powershell控制台中,运行Remove-Item2“ YYYY” -Recurse,其中YYYY是您要递归删除的文件夹的Windows路径(例如C:\ Potatoes \ Badgers \ FolderToDelete)。 >
#21 楼
我终于找到了如何在Windows 10上使用Powershell来执行此操作,其中单个文件名过长。以下是我要在Windows 10上运行该文件的步骤:将Zip文件解压缩为目录C:\ WINDOWS \ system32 \ WindowsPowerShell \ v1.0 \ Modules中的文件夹NTFSSecurity。使用管理权限(又称为Admin Mode)打开Powershell控制台并运行Get-Module- ListAvailable
,并确保NTFSSecurity出现在已注册模块列表中的某个位置。
运行Set-ExecutionPolicy Unrestricted绕过签名的执行模式。您必须先用Y(es)确认此操作
最终将CD cd到要删除的文件夹。
在Powershell控制台中,运行Import-Module NTFSSecurity。
在Powershell控制台中,运行Remove-Item2“ YYYY” -Recurse,其中YYYY是您要递归删除的文件夹的相对或绝对Windows路径(例如C:\ Potatoes \ Badgers \ FolderToDelete)。
检查是否有效。< br最终使用Set-ExecutionPolicy Restricted设置回签名执行模式。您必须使用Y(es)确认此操作。
#22 楼
如果您在Windows上的Ubuntu上安装了Bash,则可以在常规命令提示符下cd到父目录,然后键入:bash -c "rm -rf dirname_here"
启动bash,递归地删除linux中没有文件名限制的目录,然后退出并返回常规命令提示符。
#23 楼
导航到WinRAR中的目录,选择文件,按F2键,将文件重命名为较短的名称。然后您可以照常删除文件。来源:https://www.youtube.com/watch?v=qQTyTprFAOg
评论
我在发布此问题之前找到了解决方案,但是由于其他人可能会遇到此问题,因此我决定发布它,以便他们可以找到我遇到的解决方案。哦,我知道,但是通常当我做这样的事情时,我会暂时搁置“未回答”问题,看看是否还有其他人有更好的解决方案。
到目前为止,最简单的解决方案:youtube.com/watch?v=qQTyTprFAOg
使用Ubuntu或任何其他Linux可启动CD,我们可以将计算机临时启动到Ubuntu或任何其他操作系统,然后我们可以选择该文件夹并轻松删除它。
这个老问题也有一些有趣的答案:superuser.com/questions/45697/…