Robocopy PURGE(或 MIR)选项不会删除正在使用的文件并且不会报告错误

Robocopy PURGE (or MIR) option is not deleting files in use and not reporting an error

在 TFS 版本中,有一个名为 "Windows Machine File Copy" 的发布步骤。在幕后,它使用 robocopy 将文件从源复制到目标。

这是它使用的选项:

*.* /S /E /DCOPY:DA /COPY:DAT /PURGE /MIR /MT:8 /R:1000000 /W:30 

在此之前的发布步骤是停止 windows 服务,该服务运行良好。脚本结尾甚至有 3 秒的延迟。我认为我们已将此服务编码为在关机期间完成所有通信,因此完成时间超过 3 秒。发生这种情况时,某些文件正在使用中。 Robocopy 似乎可以很好地处理它复制的文件,但 *EXTRA 文件是另一回事,它们不会被删除也不会重试 - 只是留在那里。此外,最后的报告显示没有错误,即使日志中有很多错误。

2017-05-08T15:37:07.7528791Z -------------------------------------------------------------------------------
2017-05-08T15:37:07.7528791Z    ROBOCOPY     ::     Robust File Copy for Windows                              
2017-05-08T15:37:07.7528791Z -------------------------------------------------------------------------------
2017-05-08T15:37:07.8622643Z   Started : Monday, May 8, 2017 10:37:07 AM
2017-05-08T15:37:07.8622643Z    Source : F:\Source
2017-05-08T15:37:07.8622643Z      Dest : \myserver\E$\destination\
2017-05-08T15:37:07.8622643Z     Files : *.*
2017-05-08T15:37:07.8622643Z        
2017-05-08T15:37:07.8622643Z   Options : *.* /S /E /DCOPY:DA /COPY:DAT /PURGE /MIR /MT:8 /R:1000000 /W:30 
2017-05-08T15:37:07.8622643Z ------------------------------------------------------------------------------
2017-05-08T15:37:09.0185873Z      *EXTRA File         269824    \myserver\E$\epay\destination\HtmlAgilityPack.pdb
2017-05-08T15:37:09.5186163Z      *EXTRA File         321024    \myserver\E$\destination\Common.pdb
2017-05-08T15:37:09.5186163Z 2017/05/08 10:37:09 ERROR 5 (0x00000005) Deleting Extra File \myserver\E$\destination\Common.pdb
2017-05-08T15:37:09.5186163Z Access is denied.

您可以清楚地看到错误,但报告没有显示任何错误并且发布步骤成功导致我们的发布中存在潜在问题。

2017-05-08T15:37:46.8492207Z                Total    Copied   Skipped  Mismatch    FAILED    Extras 
2017-05-08T15:37:46.8492207Z     Dirs :         1         1         0         0         0         0 
2017-05-08T15:37:46.8492207Z    Files :        54        54         0         0         0        49 
2017-05-08T15:37:46.8492207Z    Bytes :    8.45 m    8.45 m         0         0         0    8.55 m 
2017-05-08T15:37:46.8492207Z    Times :   0:01:49   0:00:25                       0:00:00   0:00:13

正如我提到的,它不会尝试重试失败的删除,但它会重试复制由于与我在日志中看到的证据相同的错误而失败的文件。

有没有办法告诉 robocopy 重试失败的删除并在无法删除任何文件时报告错误?我已阅读所有文档,但找不到与此问题相关的任何内容或可能的解决方法。有什么想法吗?

"Extra" 文件是目标文件夹中的文件,而不是源文件夹中的文件。据此,我想知道 "Common.pdb" 是由您的发布服务器上的任何 service/application 而不是您的 build/release 生成的,这意味着您可能没有删除此文件的权限。而robocopy Error 0x00000005一般也是权限问题导致的。所以你需要去 "Common.pdb" 文件的路径检查权限,并尝试使用你在 Windows 机器文件复制任务中配置的帐户手动删除它。

您是否尝试过使用错误代码?

https://ss64.com/nt/robocopy-exit.html

任何低于 %ERRORLEVEL% 8 的水平似乎都是您想要的水平。

从 robocopy 复制粘贴-exit.html:

ROBOCOPY \Server1\reports \Server2\backup *.*
IF %ERRORLEVEL% LSS 8 goto finish

Echo Something failed & goto :eof

:finish
Echo All done, no fatal errors.