如何在 Windows 中删除文件名过长的文件?

use*_*048 206 windows path filenames

我的妻子有几个文件和文件夹,它们以某种方式最终具有导致它们无法通过正常方式或通过命令行删除(无法删除)的文件名。我相信由于文件夹结构的深度,文件名太长了。有谁知道清理这样的文件的好工具?

Ben*_*oit 437

当你想完全删除一个目录并且它包含很长的路径时,robocopy这样做非常好:

mkdir empty_dir
robocopy empty_dir the_dir_to_delete /mir
rmdir empty_dir
rmdir the_dir_to_delete
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为 robocopy 在内部使用 Win32 函数的 Unicode 感知版本,带有\\?\文件路径的前缀;这些函数的限制为 2¹?-1 (32,767) 个字符,而不是 259 个。

您可能需要多次执行此过程才能删除所有文件。

  • Robocopy 是让我陷入困境的原因,但我从未想过使用 Robocopy 来让我摆脱困境。很好的答案!谢谢! (3认同)
  • @SarahofGaia,我的错,实际上是 2¹⁶ - 1 (2认同)

Wil*_*ins 91

从命令提示符:

dir /X
Run Code Online (Sandbox Code Playgroud)

这将以短名称格式列出您的文件/文件夹。然后使用与所写完全相同的短名称来删除文件:

del LONGF~1.txt
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于 Windows 10,显示的文件名是长文件名 (4认同)

joe*_*rty 53

我逐步进入路径,将每个连续的父文件夹重命名为“1”并尝试删除。您每次都有效地缩短了路径,而且在我最终能够删除整个目录结构(这可能是也可能不是您想要的)之前,我从未需要处理超过 4 或 5 个目录。您也可以从最后一个子文件夹执行此操作,然后向上或向下工作。

  • 这是唯一对我有用的东西。这里和其他论坛中给出的所有其他技巧都不起作用。 (7认同)
  • 这不仅为我解决了问题,还解释了我最初是如何解决这个问题的。我一定有一个接近限制的路径,然后我重命名了一个父文件夹(在名称中添加了“备份 2016 年 11 月保存”之类的内容),它将子文件夹中的文件推到了限制之外。很高兴知道原因和解决方案,即使我知道它也可能以其他方式发生,但我认为这是人们常见的方式。 (3认同)

Ada*_*amV 14

我用来绕过“完整路径和文件名”长度限制以移动、复制或删除某些内容的一个技巧是通过使用指向文件夹的映射驱动器号在中途(或更多)“插入”来缩短它一路走来

所以你有 c:\some\long\path...\and\foo\bar\folders\oldfiles\myoldfile.txt。

然后将任意驱动器号映射到路径上的某个位置,以便路径的第一个块变得只有几个字符长。先决条件 - 该文件夹必须位于共享文件夹中(如果它在服务器上,则可能已经在共享文件夹中,这是我需要执行此操作的地方),如果还没有,则在路径中的某处选择一个文件夹并分享它。根据您的环境和偏执程度,只要 NTFS 权限受到合理限制,就允许每个人修改对共享的访问。如果您愿意,只允许对您自己的帐户进行修改权限。

现在转到共享文件夹或其中的一个并共享它,或使用命令行如下。假设您将文件夹“foo”共享为“fooshare”,那么您可以这样做

net use x: \\mycomputername\fooshare\bar\folders /persistent:no
Run Code Online (Sandbox Code Playgroud)

并且 X: 驱动器现在直接指向该共享中的文件夹“文件夹”,因此“x:\oldfiles\myoldfile.txt”现在很短。

(“/persistent:no”意味着这将无法在下一次重新启动后继续存在,并在以后让您感到困惑。完成后不要忘记取消共享您的文件夹。)

请记住,您不必共享包含文件的文件夹,如果它已经在共享文件夹中,您可以通过共享和嵌套文件夹映射文件附近的目标文件夹,这样工作正常。

当我们意识到用户在文件夹结构中映射了相当深的驱动器时,我不得不使用这种技术在两台服务器之间进行大规模的 robocopy,因此他们能够使用 255 个字符,但这超出了总文件路径长度从本地驱动器根访问时。

  • 您可以使用 `subst x: C:\Some\first\part\of\the\long\path` 避免共享,然后使用 `subst x: /d` 删除驱动器 (4认同)

use*_*686 13

在某些程序中,包括命令提示符 ( cmd.exe),您可以通过为完整路径添加前缀来绕过文件长度限制,\\.\如下所示:

\\.\C:\某个目录\其他目录\一个长名字的文件

  • 在 Windows 10 中不起作用 (3认同)

Col*_*Col 9

我发现的最简单的方法是从 ubuntu live CD 启动。

作为替代方案,您可以在路径的中间创建一个共享文件夹,然后将网络驱动器映射到该文件夹​​并从映射的文件夹中删除(即使在同一台机器上)

  • 有趣的是,Ubuntu Live CD 经常帮助解决 Windows 问题^^ (17认同)

Roo*_*ook 5

将剪切/粘贴文件的目录重命名到其他位置,然后将其删除。在这里工作。

或者只是在命令提示符下,如果您不想遇到麻烦。

  • 这对我不起作用 - 由于文件名过长,粘贴操作失败 - 无论在哪里剪切它都无关紧要。 (7认同)