我正在运行一个 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%
/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