我在 Windows 中有两个文件夹,一个称为DATA,另一个称为COPIES,它们分别是源目录和目标目录。通过运行批处理,我可以将源内容的副本创建到目标目录,例如使用ROBOCOPY 。
我制作的第一个副本是完整的,即:
ROBOCOPY C:\DATOS D:\COPIAS
第二天,我再次运行批处理,但这一次我只对复制自上次复制以来的新文件或修改文件感兴趣,我会这样做:
ROBOCOPY C:\DATOS D:\COPIAS \XO
( \XO
e X include Olders ) 语句排除旧文件。这工作正常,很好。
现在问题来了:
我希望批处理的执行不要覆盖目标中已经存在的文件,而是将它们复制为新文档(mi libro (1).docx
例如)。这样,如果源文件出错,我可以在恢复模式下在目标目录的先前版本之间进行选择。类似于 Dropbox,您可以在其中查看同一文件版本的历史记录。
搜索ROBOCOPY命令的官方信息,我找不到任何告诉我如何进行的指令。
我还尝试在英文网站上查看这些查询,但它们在真实环境中不起作用:
robocopy c:\Sourcepath c:\Destpath /E /XC /XN /XO
也可以使用 XCOPY 命令:
echo n | copy /-y <SOURCE> <DESTINATION>
后者只是不覆盖,但也不复制,也就是说,它不做任何事情。
还有其他选择吗?社区中是否有人遇到过类似的问题?
感谢您的时间和关注。
Robocopy 不支持您的需求,因此您必须以编程方式进行。像 python、ruby、php 或 perl 这样的编程语言会给你更多的灵活性。
但是,如果您想要一个纯粹的批处理解决方案,您可以执行类似的操作。这是一个基本示例,其中通过添加“-copy x”(带有附加的“x”)复制更改的文件
这个想法是
xcopy
用参数调用/D
(这使得它只尝试“复制”已更改的文件)和 with/L
(它不复制文件,它只打印它要复制的内容)通过这种方式,您可以获得已更改的列表。
该列表可以被“捕获”并与 buble 一起遍历
FOR
。我推荐阅读这篇文章以了解 FOR 语句允许的所有选项以及它是如何工作的。对于我们知道已更改的每个文件,我们将查看目标中是否有任何版本“-copy x”,如果有,我们将坚持使用“x”最多的那个。
我们通过捕获命令的输出
DIR
并按文件名排序来做到这一点。对于添加额外“x”的主题,我建议阅读其他解释参数扩展的内容。除其他外,扩展名用于将文件的路径与其扩展名、没有路径的文件等“分开”。
最后,我们使用“副本名称”将文件复制到目的地