Windows:当新文件出现在文件夹中时,采取行动并将它们移动到不同的文件夹

我想在Windows环境下执行以下操作:

监视文件夹以显示新文件,当这些文件出现时,将它们移动到不同的文件夹中。 不一定需要实时发生,但要保持在文件出现15分钟之内。

在Linux中,有一个内核钩子来实时监视目录中新文件的外观,我不知道Windows中是否存在类似的东西,或者甚至是一个理想的解决scheme。 我想就如何达到这一点提出一些build议。 我在Linux中经常使用rsync; 在Windows下它是可靠的吗? 更重要的是,rsync能够处理文件已经出现但尚未完全写入的情况 – 在这种情况下,rsync(或其他工具)可以等待文件完全写入,然后再尝试移动它?

我相信其他系统pipe理员必须处理这种types的问题,所以我不想重新发明轮子,我想听听其他人做了什么。

你可以用这个batch file来做到这一点:

:loop ping 127.0.0.1 move "f:\path\*.ext" "g:\path\" GOTO loop 

这不是聪明或漂亮,但有时我自己使用它。

Robocopy应该做到这一点,但免责声明:我从来没有尝试过。

这是一个以前的问题的链接,应该有一些好的激情给你。 这样,你可以使用Windows内置的工具,而不必乱七八糟的批处理脚本等。

如果这最后为你工作,一定回来后! 我非常感兴趣的是如何实现这个实现。

您可以通过在实际文件完成后发送第二个,甚至是空文件来缓解文件完成问题。 文件监视器应该检查这个触发器文件,然后你的脚本处理你的数据文件。

如果我遇到这样的问题,并且在网上找不到合适的简单易懂的解决scheme,我使用我的(有限的)编程技巧来寻找解决scheme。

在这种情况下,你很幸运有一个由Microsoft提供的.Net-Class,称为“FileSystemWatcher”,但遗憾的是它不检查复制完成(只是创build,更改和删除事件)。

不过,我发现这个: http : //www.dotnetfunda.com/articles/show/1312/detect-file-copy-completion-in-filesystemwatcher

这个家伙写了一个小提琴,检查你指定的新文件创build文件夹,并继续处理任何你想要的文件完成时(试图打开它在一定的时间间隔,如果该文件仍然被写入不会工作)。

在给定的代码中,您可以在“//开始处理”之后插入move-files-command。

我知道这不是最简单的解决scheme,但它的工作原理和我一样,我没有find一个工具,将为您做这个事实,这是很容易编程,因为你大多只需要复制和粘贴你更安全你会是如果你从互联网上随机程序。

System Center Orchestrator对此非常有用。 这里是关于这个的微软文档。 http://technet.microsoft.com/en-us/library/hh440534.aspx