如何在大量的排除文件中使用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. 

不幸的是,白名单中的文件是人工挑选的,不能通过通配符进行过滤。

有没有办法解决这个问题?

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

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

作为参考,这个工具的文档可以在这里find。

事实certificate,robocopy作业文件的语法并不复杂。

对于您的具体情况,您可以通过创build具有以下内容的robocopy作业文件来实现您的目标:

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

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

 /XD exclude1.ext exclude2.ext exclude3.ext .... /XF file1.ext file2.ext file3.ext .... 

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

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