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

问题描述:

在TFS版本中,有一个名为“Windows Machine File Copy”的发布步骤。在它的封面下,它使用robocopy将文件从源文件复制到目标文件。Robocopy PURGE(或MIR)选项不会删除正在使用的文件,也不会报告错误

下面是它使用的选项:

*.* /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 File24 \\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重试失败的删除和报告错误,如果任何文件无法删除?我已阅读所有文档,但找不到与此问题或可能的解决方法有关的任何内容。有任何想法吗?

+0

你用什么版本的TFS的。我尝试在TFS2017.1中测试您的问题,并且如果使用这些文件,则Windows文件机器副本无法将其删除,并等待此文件完成使用。当文件完成使用时,它将被删除。看看我测试的[图片](https://1drv.ms/i/s!AopgZUVNxLwJgUT8-flyw4CN22xJ),它会多次重试删除该文件。 –

+0

您能否给出重现您问题的步骤? –

+0

@ Tingting0929-MSFT - 您的照片显示正在使用的文件并重试复制的文件。这对我来说也很好。尝试删除源目录中目标目录中正在使用的一些文件。 –

“额外”文件是目标文件夹中的文件,但不在源文件夹中。据此,我想知道“Common.pdb”是由您的发布服务器上的任何服务/应用程序生成的,而不是您的生成/发布,这意味着您可能没有权限删除此文件。并且robocopy错误0x00000005通常也是由权限问题引起的。因此,您需要转到“Common.pdb”文件的路径以检查权限,并尝试使用在Windows计算机文件复制任务中配置的帐户手动将其删除。

+0

这是一个很好的观点。我一定会检查并提供更新。这也许可以解释为什么重试机制不重试,也许它不会重试“访问被拒绝”错误。重点是什么? –

+0

这不是一个权限问题 - 当我停止服务后10秒的延迟脚本时,EXTRA文件被成功删除。也许唯一的解决办法是先擦除文件夹然后复制。缺点是TFS没有从远程服务器上删除文件夹的内置步骤。 –

+0

@ChrisGessler由于如果正在使用该文件,错误应该是错误32,因此已连线。该文件与您停止的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. 
+0

这可能是我需要的 - 我必须做一些研究并可能修改微软的任务以适应。不是一个简单的任务,但谢谢! –