强制删除名称相当大的文件


60

我经常使用Node.js来管理我编写的程序的依赖项,没什么大不了的。今天我最终得到了这样的文件夹结构: enter image description here

尝试删除任何文件时遇到此错误:

源文件名大于文件支持的名称   系统。尝试移动到路径名称较短的位置,或尝试   在尝试此操作之前重命名为较短的名称。

它已经在C:\中了,所以它不会变得更短。



你知道你的文件夹结构是如何变大的吗?我在安装grunt时遇到了相同的情况。
eran otzer

1
@eranotzer使用npm。
Seiyria

我不会在你的packages.json中写错了吗?
eran otzer

@eranotzer是的。由于npm @ 2的工作方式,每个依赖项都将其依赖项嵌套在其中。这意味着依赖链可以任意长。 npm @ 3正在寻求调整此行为。
Seiyria

Answers:


75

使用Microsoft工具 robocopy.exe

  1. 创建一个新的空文件夹,例如 c:\empty
  2. 然后将该空文件夹复制到包含您要删除的长文件名的文件夹中,例如 c:\myannoyingfolder。在命令提示符中这样做:

    robocopy / MIR c:\ empty c:\ myannoyingfolder


由于这经常是我工作流程的一部分,我想出了如何将它与Windows shell集成。请参阅下面的答案。 :)
toddmo

注意:此命令可能需要几秒甚至几分钟才能完成。所以,不要担心,让它做魔术:-)
Adil Malik

谢谢,为我工作。我必须确保我还杀死了仍然保留其中一个文件的任何进程(IIS)。
Slick Shinobi

每当我尝试打开robocopy.exe时,窗口会闪烁一秒钟,然后什么都不会发生。请帮忙
Maulik Modi

27

好吧,假设你要删除一棵树 D:\very\long\path,您不一定需要使用任何工具,如Robocopy。

  1. 转到包含该目录的驱动器的根目录 你无法删除
  2. 创建一个具有单个字母名称的目录,例如 D:\a
  3. 导航到要删除的目录内部,在此处 案件 D:\very\long\path
  4. 全选 ( 按Ctrl + 一个 )和切( 按Ctrl - X
  5. 导航到刚刚创建的文件夹
  6. 粘贴( 按Ctrl - V
  7. 现在,移动到根目录并删除临时文件夹,在本例中 D:\a
  8. 然后返回并删除原始目录

2
这对我来说第一次尝试不起作用。但是,在重复此过程之后,我在I文件夹中的更多文件夹级别可以删除所有内容。
abaldwin99

1
伟大的解决方案,完美无瑕地工作。简单有效,谢谢!
Caner Öncü

大!!奇迹般有效!!!没有其他工具需要。谢谢!
Prasanth K C

这很好用,我想补充一点,如果从路径中选择文件不起作用,你可以在长路径中间的某个地方选择一个文件夹,然后将该文件夹移动到临时文件夹,然后删除两者都以类似的方式。
Narayana Nagireddi

4

我在尝试多种命令时开始输入此问题,包括 del /Frmdir /S (以及在删除时保持移位以试图绕过回收站)。我觉得 rmdir /S 实际上删除了所有文件,因此我可以继续删除作为叶节点的文件夹,然后一次向上推进几个节点。最后我把它们都清理干净了,但这太荒谬了。


4

您可以将此功能集成到Windows shell中。我对Flo的答案的提升太长了,无法发表评论。

我加了一个 Delete 命令到Windows上下文菜单。

enter image description here

delete.reg 文件添加注册表项以将文件夹与 robodelete.bat 批处理文件。

delete.reg

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\Delete]

[HKEY_CLASSES_ROOT\Directory\shell\Delete\command]
"Extended"=""
@="\"D:\\Documents\\robodelete.bat\" \"%1\""

robodelete.bat

mkdir c:\empty
robocopy /MIR c:\empty %1
rmdir %1
rmdir c:\empty

注意 :您可能需要根据您的偏好更改两个文件中的路径。

警告 :无法撤消此命令。它不使用回收站,并且在销毁文件夹之前不要求Y / N确认!


谢谢你的警告。我在我的工作流程中也需要这个,但我想避免在我的右键菜单中有一个缺少Y / N确认的核按钮。如果我有时间,我会尝试进行调整并建议编辑。
abaldwin99

1
@ abaldwin99,也许这样 stackoverflow.com/a/1807318/1045881
toddmo



0

在许多情况下,从命令提示符CD并进入目录并使用DEL将起作用。

如果没有,您必须在目录树上运行您的名称:将最低级别的文件夹重命名为较短的名称(例如“a”),然后将下一个较高的文件夹名称重命名,依此类推,直到总路径足够短。通过从下到上的工作,您总是操纵名称,其具有比最终文件更短的完整路径。


0
  • 打开管理命令提示符
  • net use z: c:\path
  • del z:\*.*

相应地调整。 Z:只是一个任意的驱动器号,用于映射违规路径。最后一个删除命令将擦除您已映射的WHOLE目录 - 因此根据需要更具体。


2
这对非电力用户来说非常危险!如果做错了,有可能擦除驱动器。
Rudi Strydom

同意100%。绝对要小心谨慎。
Bradley Forney

0

不错的方法就是拥有 pendrive上的可启动Linux 和删除文件没有问题 现场CD 操作系统。


-1

我也有同样的问题,我自己找到了,简单地重命名父文件夹尽可能少。防爆。如果我们的文件夹在“ d “开车就好 d://文件夹/ Undelete_Folder 。你只需要做的一件事是将父文件夹名称重命名为小,你可以重命名它“ 一个 “那么你的位置就是 d:// A / Undelete_folde 河然后删除父文件夹。


这不一定有效(如果它仍然更大,即使减少了怎么办?),但我明确提到我的文件夹位于驱动器的根目录中。
Seiyria

-2

如果一切都失败了

转到字符串中的最终目录。 剪切文件 粘贴回String中的第4或第5个文件。 然后[Shift] + [删除]应该做伎俩。

当我从DPM备份中删除测试还原文件时,我对在提升的命令提示符下运行上述操作持怀疑态度。

希望这可以帮助。


这可能不会起作用,因为他们会这样做 仍然 拥有剪切操作的长文件路径。
Seiyria
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.