不要复制已经复制的文件

时间:2014-03-07 21:03:30

标签: batch-file cmd robocopy

我需要监视源目录并复制到另一个软件监视的目标目录,然后在上载时删除该文件。

我无法使用此软件监视器并从源目录上载,因为它必须在上载完成后删除该文件。这个问题是我的组织中的一些用户在将文件保存到源目录后不会关闭文件...因为它无法被软件删除。

因此,为什么我要复制到另一个目录,然后软件正在从目标目录上传和删除。

现在所有这些都可以工作,但是,在robocopy将文件复制到目标目录后,软件会上传文件然后将其删除,但是robocopy会将相同的文件从源目录重新复制回到目的地目录。

这是一个主要问题,因为我们只能上传文件一次,不能重复。

我已经尝试了/ mov开关,但是很清楚,因为如果文件在源目录中保持打开,这会尝试从成功复制后删除源文件,然后/ mov开关不会删除它...

我一直试图开始工作的命令是:

robocopy Source-Dir Destination-Dir *.pdf /w:20 /r:30 /mon:1 /mot:1 /log+:log.txt

在这里完全不知所措......

2 个答案:

答案 0 :(得分:1)

即使您在上传后没有删除文件,您现在又如何重复其他任何文件?即使它具有相同的名称(可能是大小),它仍然可以代表具有不同内容的完全不同的文件。

显然,你需要某种文件命名约定,所有各方都可以使用它来区分文件。

假设您有一个既定的命名约定,那么您只有两个选择。您要么依赖排队文件的用户来记住哪些文件已被处理,要么以某种方式记录已处理的文件。听起来你想要后一种选择。

上传文件的过程会在删除文件之前将处理后的文件名写入日志。同一进程还可以针对日志验证每个新文件,以查看它是否已经过处理过。如果有,那么只需删除它而不再做任何其他事情。

在我的脑海中,我可以想到两种快速记录已处理文件的方法。

一种是简单地将每个处理过的文件名附加到processed.log文本文件:echo someFileName.ext >>"logPath\processed.log"。 FINDSTR可用于检查是否已经处理了给定名称。

另一个选项是创建一个已处理的文件夹,并通过在已处理文件夹中创建一个具有该名称的空文件来记录每个已处理的文件。一种方法是copy nul processed\someFileName.ext >nul。 IF EXIST可用于查看文件是否已被处理。

答案 1 :(得分:0)

您可以使用此Robocopy开关 - 假设Robocopy在第一次复制文件时设置归档A属性,它应该如此。这将排除具有A属性集的文件。

/XA:A