如何使用 robocopy 排除大量文件?

如何使用 robocopy 排除大量文件?

我想使用 robocopy 移动大量文件,但白名单中的文件除外。白名单包含大约 150 个不同名称的文件。当我将白名单的文件名复制并粘贴到命令行中(使用参数/xf)时,robocopy 会截断该列表。

c:\test> robocopy src dest *.ext /xf exclude1.ext exclude2.ext exclude3.ext ... exclude 299.ext exclude300.ext

结果是:

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows

-------------------------------------------------------------------------------

  Started : Fri May 24 14:09:31 2013

   Source : C:\test\src\
     Dest : C:\test\dest\

    Files : *.ext

Exc Files : exclude1.ext
            exclude2.ext
            exclude3.ext
            ....
            ....
            exclude200.ext
            exclude201.ext
            exclu

进而:

'exclude250.ext' is not recognized as an internal or external command,
operable program or batch file.
'exclude251.ext' is not recognized as an internal or external command,
operable program or batch file.
'exclude252.ext' is not recognized as an internal or external command,
operable program or batch file.
'exclude253.ext' is not recognized as an internal or external command,
operable program or batch file.

不幸的是,白名单中的文件是精心挑选的,无法通过通配符进行过滤。

有没有什么办法可以解决这个问题?

答案1

Windows 中的命令行长度有限制(我认为是 2048 个字符左右)。

您应该生成一个作业文件,其中包含指定的排除列表的一小部分(使用参数/save:filename)以获取语法,编辑文件以包含完整列表,然后使用参数/job:filename来运行它。

作为参考,可以在此处找到此工具的文档。

答案2

事实证明,robocopy 作业文件语法并不是那么复杂。

对于您的具体情况,您可以通过创建具有以下内容的 robocopy 作业文件来实现您想要的效果:

/XD
exclude1.ext
exclude2.ext
exclude3.ext
....

如果您也想对文件执行相同的操作,那么您的 robocopy 作业文件将如下所示:

/XD
exclude1.ext
exclude2.ext
exclude3.ext
....

/XF
file1.ext
file2.ext
file3.ext
....

通过使用相同的逻辑,您可以将任何其他选项从命令行移动到作业文件。

答案3

尝试在 /XF filename1*.ext filename2*.ext filename3*.ext 后使用通配符。只有当您知道文件名在整个结构中是唯一的时,这才会起作用。您可以更改要排除的文件的命名约定以绕过此限制。

相关内容