我在这里寻找有关 Robocopy 算法如何确定文件是否已更改的详细信息。如果我使用 /mir 参数,Robocopy 必须确定哪些文件已更改,哪些文件未更改。它是否使用修改后的时间戳或文件大小、哈希值或所有这些的组合?
有趣的是,文档中没有提到这一点。
答案1
好吧,经过一天的研究、阅读文档和亲自测试(所有结果都相同)后,我得到了答案。
简短的回答是:Robocopy 的默认值是(除非你通过参数指定不同的值),它将复制任何文件,其中时间戳或者文件大小 不同请记住,Robocopy 总是从源复制到目标。因此,如果目标中有一个较新且较大的文件,Robocopy 会用源中较旧且较小的文件覆盖它(这就是为什么我强调“不同”这个词的原因——它不是更新或者更大, 只是不同)。
在更深层次上,您可以使用 /it 选项进行检查,即使文件的属性不同,也可以复制不同的属性 - 即使文件大小和时间戳相同(好的,对于 100%,我不知道它是否会复制文件或仅复制缺失的属性,但由于文件相同,结果将是相同的)。
我找到了另一个帖子中引用的冗长的文档 - 它是关于版本 XP010(我猜是 Windows XP)。但是根本没有关于 robocopy 的更新文档。您可以在此处找到文档:
http://theether.net/download/Microsoft/Utilities/robocopy.pdf (阅读“使用 Robocopy 文件类”部分,那里的所有内容都非常精确)
该文档是关于 Robocopy 的旧版本(在 Win7 下通常使用版本 XP027) - 但您可以在此网站上检查版本的变化 - 它有一个非常简洁的概述:
http://yarcgui.wilkes.es/De/RoboCopy/index.htm
底线是 XP 和 Win7 之间没有太大区别 - 只有微小的区别并且更改是添加参数 - 而不是更改它们(参数 /mir 除外)。我认为可以肯定地说比较机制不会改变 - 因为与添加更多参数的微小更改相比,这将是一个巨大的变化。
这可能是没有新文献的原因。
如果您正在寻找相同的信息并正在阅读本文,希望这对您有所帮助。我试图做到准确,并仔细进行了研究。
答案2
我的理解是,如果时间戳相同但文件大小不同,则文件被归类为已更改。如果时间戳发生变化,则文件被归类为较旧或较新。