【问题标题】:xcopy and Robocopy deleting destination filexcopy 和 Robocopy 删除目标文件
【发布时间】:2021-03-03 02:18:30
【问题描述】:

我正在尝试将一些文件从一台服务器复制到另一台服务器的共享文件夹,问题是,它有时可以工作,但 xcopy 和 robocopy 命令通常会在失败时删除目标文件,即使备份失败我也需要文件留在那里。

要了解详细信息,在我运行命令的服务器 (Windows 10) 上,我有一堆 Tableau 文件 (.twbx),这些文件通过我每天早上使用计划任务运行的 .JAR 文件进行更新.

文件更新后,我使用 xcopy 将它们复制到另一台服务器的共享中(我后来尝试使用 Robocopy 来查看问题是否停止发生),但是当我早上检查时,目标文件丢失了。它偶尔会起作用,问题是我需要这些文件始终位于共享文件夹中。

我的 .bat 文件如下所示:

我按顺序运行复制命令(每个文件一个,因为它们位于不同的文件夹中)。

Robocopy E:\Tableau\TableauFileFolder \\shareserver\sharefolder\Tableau\TableauFileFolder TableauFile.twbx /mt /r:0 /log+:E:\Tableau\LogFile.log
Robocopy E:\Tableau\TableauFileFolder2 \\shareserver\sharefolder\Tableau\TableauFileFolder2 TableauFile2.twbx /mt /r:0 /log+:E:\Tableau\LogFile.log
Etc...

对于我正在使用的 xcopy:

xcopy /s/y E:\Tableau\TableauFileFolder\TableauFile.twbx \\shareserver\sharefolder\K2BAnalytics\TableauFileFolder

目录结构是这样的,在我运行命令的服务器上:

E:
  |-->Tableau
    |-->ShareFileFolder
      |-->ShareFile.twbx
    |-->ShareFileFolder2
      |-->ShareFile2.twbx

共享服务器:

sharefolder:
  |-->Tableau
    |-->ShareFileFolder
      |-->ShareFile.twbx
    |-->ShareFileFolder2
      |-->ShareFile2.twbx

我的日志文件在丢失的文件上显示此错误:

2020/11/19 04:31:57 ERROR 0 (0x00000000) r E:\Tableau\TableauFileFolder\TableauFile.twbx
The operation completed successfully.

运行命令的管理员用户对共享的 Tableau 文件夹具有完全控制权限。

我遇到这个问题已经有一段时间了,我在任何地方都找不到解决方案。我没有使用 /MIR,所以我不知道是什么导致目标文件被删除。

【问题讨论】:

  • 您的RoboCopy 命令不会删除目标中的任何内容,因为可以这样做的唯一选项应该是/PURGE/MIR(/MOV 和@ 987654330@ 可以从源中删除),而你没有使用其中任何一个!
  • 我知道,但是为什么我的文件会丢失?覆盖文件有问题吗?有时文件复制成功,但通常有些文件在执行计划任务后消失。
  • 覆盖一个文件的本质,意味着它必须在之前和之后都存在。你的意思是一个或多个文件没有被复制?因为这与被删除的文件不同,(在这种情况下,要求不重试肯定也没有多大帮助).

标签: batch-file cmd robocopy xcopy


【解决方案1】:

正如人们在 cmets 中所建议的那样,我允许 Robocopy 使用 /R:n 进行了一些尝试,这极大地缓解了这个问题,但仍然不是万无一失的。有些人建议使用更智能的文件复制任务,但我不知道 Robocopy 有什么好的替代方案。

我的命令现在是这样的:

Robocopy E:\Tableau\TableauFileFolder \\shareserver\sharefolder\Tableau\TableauFileFolder TableauFile.twbx /mt /r:5 /w:10 /log+:E:\Tableau\LogFile.log

【讨论】:

    【解决方案2】:

    以管理员权限运行的robocopy source target /b /MT:1 可以为您解决问题。

    在我的类似情况下,源文件被另一个进程锁定,并且:

    • /b 使 robocopy 在无法访问目标文件时保持原样(但需要管理员权限)
    • /mt:<n> 或只是 /mt 使 robocopy 注意到“ERROR 0”并重试。

    当我手动运行robocopy 时,我只使用robocopy source target /MT:1 - 看到错误我可以停止应用程序锁定文件并在完成后启动它。

    官方文档:https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy

    【讨论】:

      猜你喜欢
      • 2017-01-28
      • 1970-01-01
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      • 2014-07-14
      • 2012-03-25
      • 2012-02-13
      • 1970-01-01
      相关资源
      最近更新 更多