【问题标题】:Robocopy Crashed trying to delete very long(1000+) subfolders WINDOWS [closed]Robocopy Crashed 试图删除很长(1000+)的子文件夹 WINDOWS [关闭]
【发布时间】:2014-11-21 11:04:28
【问题描述】:

我正在使用 robocopy 命令

robocopy empty_dir super_subfoldered_folder /s /mir
rmdir empty_dir
rmdir super_subfoldered_folder

立即删除文件夹,但在此命令期间robocopy.exe 停止工作。 我试图从主文件夹中至少有 50 个子文件夹的路径中删除仍然崩溃。

我尝试将它们重命名为“1”,但 Windows 不允许我超过 100 多个文件夹,而且至少还有 1000 个以上。试图创建新分区-subst j:。重命名一些文件夹并删除分区,但这需要永远因为它们的数量。 尝试了 dir /xdel 的缩短名称 -> 不起作用。

还有其他方法可以删除这些文件夹吗?

【问题讨论】:

  • 尽可能深地将文件夹重命名为“1”后,将最深的“1”文件夹移动到驱动器的根目录。根据需要重复。如果可能,请编写该过程的脚本,否则您将需要大量输入。

标签: windows batch-file robocopy delete-directory


【解决方案1】:

Windows 中的文件路径在到达实际的文件系统驱动程序之前要经过几层。结果有两个限制。 1) 顶层 API 引入的 MAX_PATH (260) 限制 2) 文件系统实际使用的 32K。由于您已经有了该路径,因此它显然在文件系统的限制范围内。尝试通过在前面添加“\\?\”来使用路径。这表明 Win32 API 不应解析字符串,而是将其直接传递给文件系统 (http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx)。这仅在进行调用的过程是 Unicode 和 64 位(在 64 位系统上)时才有效。否则字符串必须被转换和/或封送,你又回到了 260 的限制。

【讨论】:

  • 好的,忘了说。由于您将路径直接传递给文件系统驱动程序,因此没有路径操作。没有当前目录,没有“.”文件夹等。您必须传递完整路径。
  • 刚刚尝试了 MOVE 命令。它接受这种语法。我能够使用 MOVE \\?\C:\complete\directory\path... C:\Temp 移动子树
  • Robocopy 自动将其提供的路径转换为 ​​\\?\ 格式。
  • 真正的问题是我想删除文件夹而不是移动它们,我实际上找到了回收站路径并尝试将文件夹移动到那里但由于某种原因它们没有出现在垃圾箱中并且仍然保持。尝试在 robocopy 命令中的文件路径前添加 \\?\ 以删除无效。我非常感谢一些用于删除的代码示例。 robocopy empty_dir \\?\super_subfoldered_folder /s /mir rmdir empty_dir rmdir super_subfoldered_folder
  • 对。 MOVE 将帮助您缩短路径并在路径足够短时移除。这有助于一次性的情况。我还为您编写了一个示例程序。我将尝试在此处附上新的回复。
【解决方案2】:

Windows 有一个subdirectory depth limit,它不是很深。

您可以通过在 cd 或 USB(如 Ubuntu)上启动 Live Linux distro 并使用 GUI 文件管理器删除树来获得更好的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    相关资源
    最近更新 更多