Robocopy 在镜像时删除目标中跳过的文件

Robocopy 在镜像时删除目标中跳过的文件

尝试使用 Robocopy 镜像两个文件夹时,选项 /MIR 会导致在源文件正在使用时删除目标中的文件。具体来说,这种情况发生在备份我的 Outlook 文件夹并且 *.pst 文件正在使用时。

输出如下:

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

  Started : Tuesday, 18 August 2020 18:58:28
   Source : P:\Outlook\
     Dest : D:\_SyncFolderTest\To\Outlook\

    Files : *.*
        
  Options : *.* /BYTES /S /E /DCOPY:DA /COPY:DAT /PURGE /MIR /J /R:0 /W:30 

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

                      23    P:\Outlook\
        Newer           183116800   AVArchive_2018.pst
        Newer           128009216   AVArchive_2019.pst
        Newer           42427392    AVArchive_2020.pst
        Newer           403801088   AVOutlook.pst
        New File          131072    ~AVArchive_2018.pst.tmp
        New File          131072    ~AVArchive_2019.pst.tmp
        New File          131072    ~AVArchive_2020.pst.tmp
        New File          131072    ~AVOutlook.pst.tmp

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

                Total    Copied    Skipped  Mismatch    FAILED    Extras
    Dirs :          1         0          1         0         0         0
   Files :         23         4         15         0         4         0
   Bytes : 3545771008    524288 2787892224         0 757354496         0
   Times :    0:00:00   0:00:00                        0:00:00   0:00:00


   Speed :             37449142 Bytes/sec.
   Speed :             2142.857 MegaBytes/min.
   Ended : Tuesday, 18 August 2020 18:58:28

AVOutlook.pst 确实较新,但无法复制,不会引发错误,并会删除目标中的旧版本。因此,它不仅没有备份,而且以前的备份现在也消失了。退出代码是出现问题的唯一线索:8 = 无法复制某些文件或目录。

我有点明白,为了实现镜像,必须删除并替换目标旧文件,但为什么没有错误,为什么不识别源和目标中的文件是相关的?这是 Robocopy 的缺陷还是设计决策?有没有更安全的方法?

答案1

这是 Robocopy 的缺点还是设计决定?

AVOutlook.pst 确实较新,但无法复制它,不会引发错误,并且会删除目标中的旧版本。

这是一个设计决定并已记录:

Robocopy 将无法复制被其他用户或应用程序锁定的文件,因此使用 /R:0 限制重试次数将通过跳过任何正在使用的文件来加快复制速度。

来源:Robocopy“强大的文件复制”-Windows CMD-SS64.com

有没有更安全的方法?

是的,使用 VSHADOW 或 DISKSHADOW:

Windows 卷影复制服务是唯一可以复制打开文件的 Windows 子系统。Robocopy 不使用卷影复制服务,但它可以备份已使用 VSHADOW 或磁盘影子

来源:Robocopy“强大的文件复制”-Windows CMD-SS64.com

不会引发错误

确实如此,并且也有记录(Robocopy 使用退出代码):

= Windows 8 和 Windows 10 中的新选项

Robocopy退出代码

来源:Robocopy“强大的文件复制”-Windows CMD-SS64.com

您可以检查这些退出代码并在批处理文件中采取适当的操作。

相关内容