Robocopy 偶尔会忽略文件

Robocopy 偶尔会忽略文件

我正在运行一个 robocopy 脚本,该脚本在过去几周内只是偶尔运行。

问题

  • 在源目录中,我每天接收两次文件。这个脚本多年来一直运行良好,但自 12 月以来,脚本运行三次中有两次会忽略这些文件。

剧本

目标:将命名方案内的文件复制*Identifier1*到 UNC 路径,然后使用移动它们的另一个应用程序来处理它们。

set sourcefile=D:\some\local\path\here\
set destination=\\someip\some\path\
mkdir %destination%
robocopy %sourcefile% %destination% *Identifier1* /V /R:5 /W:10 >> %Logfile%

wait 60  
anotherapplication.exe

环境

  • 已全面修补的 Windows Server 2012R2
  • 旧式批处理脚本,不是 powershell 脚本
  • 我通过提升权限的任务计划程序触发脚本
  • 执行的用户是具有本地管理权限的域用户
  • 我必须*Identifier*在脚本中使用。我收到两个文件,一个被命名$Timestamp_Identifier1.csv,另一个被$Timestamp_Identifier2.csv。我只需要复制其中一个。

我尝试过的方法

  • 检查了文件和目录的权限 - 运行脚本的用户肯定具有读/写权限。使用其凭据进行远程操作时,手动复制工作正常。
  • 启用/V开关以获得更多输出。不幸的是,robocopy 甚至没有在日志中提及它忽略的文件。
  • 启用/R:5/W:10开关以确保这不是负载问题
  • 尝试先让 robocopy 复制到本地目录,结果出现了“有时有效”的相同行为。如果我在同一批次中将文件复制到本地和 UNC 路径,则会忽略相同的文件。

值得注意的事情

  • 除时间戳外,文件始终具有相同的命名方案
  • 被复制的文件和未被复制的文件之间没有明显的区别。包括它们的名称和文件权限。
  • 从 webdav 服务下载文件后,WinSCP 会在源目录中创建这些文件。日志显示没有任何异常。
  • 我在同一个脚本中运行的程序anotherapplication.exe可以很好地拾取文件,并且确实能够移动它们。

有什么想法或提示吗?一如既往,非常感谢。

答案1

Robocopy 偶尔会忽略文件。在命名方案内复制文件标识符 1到 UNC 路径

您可以尝试使用 Robocopy 添加/FFT开关:

robocopy /FFT %sourcefile% %destination% *Identifier1* /V /R:5 /W:10 >> %Logfile%

Robocopy 开关

/FFT : Assume FAT File Times (2-second date/time granularity).

更好的描述

/FFT 使用 fat 文件计时而不是 NTFS。这意味着粒度不太精确。对于跨网络共享操作,这似乎更可靠 - 只是不要依赖文件计时完全精确到秒。


另一个例子

我以前曾使用过如下所列的类似语法,使用 UNC 路径对数百 GB 的数据进行文件服务器迁移,没有出现任何我无法解决的问题或错误。

考虑使用IF NOT EXIST "%destination%" mkdir "%destination%"仅在目录不存在时创建目录。还考虑进行递归DIR /S "%sourcefile%\*Identifier1*" >> %LogFile%以将详细信息放入日志中,以显示符合命名约定的完整路径和文件名。这样,您可以在 Robocopy 开始之前查看文件是否显示在预期位置的该命令中,这是确认文件存在的另一个级别。

/ZB :: use restartable mode; if access denied use Backup mode.

IF NOT EXIST "%destination%" mkdir "%destination%"
DIR /S "%sourcefile%\*Identifier1*" >> %LogFile%
robocopy /FFT %sourcefile% %destination% *Identifier1* /ZB /SEC /COPYALL /SECFIX /R:5 /W:5 /LOG+:%LogFile% /V

额外的

  1. 您可能还考虑使用 Robocopy 测试/IS/M/A开关。
  2. 你可能会使用复制使用/Y/F开关以简单的方式使用该方法获取完整日志记录为了循环似乎也能满足你的需要

    FOR %%A IN ("%sourcefile%\*Identifier1*") DO XCOPY /Y /F "%%~F" "%destination%\">> %Logfile%
    

相关内容