Robocopy:复制文件而不复制其目录结构

Robocopy:复制文件而不复制其目录结构

我有一个名为 的网络文件共享\\SMWEB\MSDS ,其中包含数百个名为 的子目录 (即 加上一个数字)。每个子目录中可能包含许多文件 — 一些和各种文件。还可能有一个名为 的子目录,其中包含与元数据相关的旧 FrontPage 扩展。但那里MSDSnnnnMSDS.html.jpg.pdf_vti_cnf应该这些子目录中始终至少有一个文件,其名称格式为。 (数字的长度可能不同;例如 或等。)MSDS#.PDFMSDS99.PDFMSDS1099.PDF

这些文件可能还存在旧的、过时的版本,所有者在文件前面附加了 (参见图中的红色框 - 此示例中有两个文件的存档版本)。X#_MSDS0001.PDF

树结构如下:
        树结构,如上所述

以下是我需要完成的任务:我需要将所有当前的顶级 PDF 文件复制到某个地方(驱动器SDS上的单个目录H:\)。我不想复制子文件夹,我只想要具有模式的文件MSDS*.PDF。(这些文件在上图中以黄色突出显示。)因此我想排除:

  • 目录下子目录中的文件(例如,在子目录中),MSDSnnnn_vti_cnf
  • 名称不以 开头的文件MSDS (例如文件),以及X#_
  • 名称不以 结尾的文件.PDF(例如 HTML 和 JPEG 文件)。

我在 Robocopy 中执行了以下命令:

robocopy \\smweb\msds\ H:\SDS msds*.pdf /S /R:3 /W:3 /NDL /XJD /XD _vti_cnf

问题是 Robocopy 复制了我的H: 驱动器上的文件夹结构。

我怎样才能实现我的目标?

答案1

您是否考虑过使用其他文件复制工具?Robocopy 不支持开箱即用的功能。以下链接讨论了该确切主题:

https://stackoverflow.com/questions/8690245/robocopy-copy-folders-content-to-a-single-folder

你也可以尝试一些简单的方法,例如

for /r \\SMWEB\MSDS %f in (MSDS*.pdf) do @copy "%f" H:\MSDS

答案2

最后,我采取了两步走的方法。

首先,我运行 Robocopy 命令,将所有文件和树结构复制到名为 SDS1 的临时目录,但它排除了包含无关元数据的“_vti_cnf”子文件夹:

robocopy \\smweb\msds\ \\smf4\HOME\gpence-home\SDS1 msds*.pdf /S /R:3 /W:3 /NDL /XJD /XD _vti_cnf

然后我运行了一个 PowerShell 脚本,该脚本通过将文件复制到另一个名为 SDS2 的目录来删除树中的子文件夹。(-WhatIf 参数显示结果而不实际执行命令。当您准备好“真正”执行命令时,只需删除该参数即可。)

get-ChildItem -Path "\\smf4\HOME\gpence-home\SDS1\msds*.pdf" -Recurse | Copy-Item -Destination "\\smf4\HOME\gpence-home\SDS2" -WhatIf

这对我很有效。

相关内容