我计划使用 robocopy 将文件和文件夹从服务器上的目录移动到硬盘驱动器上的目录,使用以下命令,
robocopy [source] [destination] /e /move /xo
如果发生文件名冲突,我的理解是只有当文件较新(或年龄完全相同?)时才替换硬盘上的文件,然后删除已复制的文件。
理想情况下,我希望清除源目录中的文件,但我怀疑可能存在问题;如果文件未被传输(可能当前正在使用中,或者目标中存在较新的版本),那么它将不会被删除。
如果在复制过程中出现实际错误(例如,如果 robocopy 拒绝移动正在使用的文件),我不能仅添加后续命令来删除整个源目录,因为这可能会导致未传输的数据丢失。
我计划将其用作批处理文件,由 Windows 定期作为计划任务执行。
因此我的问题是:是否有一种简单的自动化方法可以让 robocopy 删除已正确传输的文件(因为它已经这样做了)或目标中已经存在较新的副本的文件(它目前没有这样做),同时保留由于其他错误(例如权限、文件正在使用等)而未传输的文件?
有没有更简单的方法来做到这一点?
答案1
对于此类操作,我倾向于使用镜像开关 (/mir),您可以将目录复制到第二个位置,当内容移出源时,它们也会从目标中删除。不过,我意识到这可能不适用于您的情况。
您可能只需要一种方法来清除源目录中的文件,只要它们被认为足够旧。运行 forfiles 之类的第二项工作对您有用吗?
forfiles /d -14 /p C:\myfolder /C "cmd /c del @file"
这将清除所有超过 14 天的文件。