就我而言,我一开始就完全控制了源共享和目标共享。问题在于Robocopy在开始递归子目录之前将目标共享上的ACL重置为空值(没有人允许)。经过一些快速测试,我的结论是Robocopy不处理继承的权限。假设您要将C:\ Share1复制到D:\,并且C:\ Share1从C:\根目录继承其权限,则它实际上没有显式的ACL。因此,当您复制其ACL时,实际上是在复制……什么也没有。通过将空的ACL复制到目标位置,您的权限将在复制的第一步中删除,并且随后对该共享的所有所有写操作都会因错误5而失败。
仅当从要访问的具有继承权限的源和要访问的没有继承权限的目标中复制时,这才是问题。如果将C:\(在ACL中有明确的名称)复制到D:\,则没有问题。如果确实是您的问题,则可以通过完全控制将自己明确添加到源ACL中,从而解决此问题。运行副本时,您的ACL条目将复制到目标位置,并且可以写入后续文件副本。复制完成后,您可以撤消更改(在源和目标上)。
如果上述情况仍然存在问题,则可能需要考虑尝试使用/ B开关,该开关将尝试使用您作为备份操作员的特权来备份文件。这将允许您复制原本无法复制的文件,例如,如果您不在目标共享的ACL上。Robocopy默认为尝试重新启动副本。通过放弃可重新启动的副本,最坏的情况是,如果发生中断,您将丢失当前正在传输的文件。下一遍将从该文件的开头而不是途中重新启动该文件。
希望能有所帮助。以下是Microsoft Robocopy文档中有关/ B开关的报价:
引用:
如果将NTFS安全信息(ACL)与文件数据一起复制,则可以将具有读取访问权限但没有写入访问权限的文件复制到其中。将此类文件复制一次并应用ACL后,当您尝试再次复制文件时,可能会发现此错误并出现“访问被拒绝”错误。在这种情况下,您应该使用/ B或/ ZB开关在备份模式下复制文件。
/ B使用备份语义(备份模式)复制所有文件。/ ZB首先尝试以可重新启动的模式复制文件(以提高弹性),但是如果失败并出现“访问被拒绝”错误,它将自动使用备份模式重试该复制。