Robocopy 能否以少于一分钟的时间增量监控文件?

Robocopy 能否以少于一分钟的时间增量监控文件?

Robocopy可以选择监视源目录并复制任何有更改的文件。您可以指定在复制之前目录中必须发生多少次更改(/mon n其中n是更改次数)以及在重新扫描之前要等待多长时间(/mot t其中t是等待的时间(分钟))。

我想几乎连续地监视一个文件夹,因为我只扫描 1 个文件,并且我希望更改基本上是即时的。但我似乎无法让 robocopy 监视少于一分钟的时间跨度。我试过了,但/mot 0.5失败了。我也试过了/mot 0,robocopy 在扫描一次后就退出了,没有连续监视。

如何让 robocopy 以小于 1 分钟的时间增量近乎连续地扫描文件夹?或者,是否有其他命令行工具可以持续监视文件源并实时复制更改?

答案1

Robocopy

/mot:<M>
Monitors source, and runs again in M minutes if changes are detected.

由于它只接受分钟作为参数,我猜你不能强迫它更频繁地运行。但是,你可以使用批处理文件运行它,并让计时和循环在批处理文件或计划任务中进行,而不是在 robocopy 中进行。

答案2

您的标签表明您正在使用 Windows 8。这很好,因为您拥有 PowerShell 这个出色的工具,以及一个名为的方便的小 cmdlet Register-ObjectEvent

创建一个文本文件,将扩展名更改为.ps1,将下面的脚本粘贴到文件中。将$watchedFolder变量更改为您要监视的文件夹。更改 Do-Something 函数以包含您的 robocopy 命令或其他任何内容。运行脚本,只要脚本正在运行,该函数就会运行(几乎是立即运行!),只要监视文件夹中的文件或文件夹发生更改。

您可以在 Windows 启动时运行该脚本,并且它将一直在后台运行,而无需使用计时器。

$block = {    
    function Do-Something
    {
        param ($message, $event)
        # function to call when event is raised
        # do a robocopy or whatever

        Start-Process cmd.exe "/C echo $("{0} {1}" -f $event.SourceEventArgs.FullPath, $message)&pause"
    }

    $watchedFolder = "C:\Users\Admin-PC\Desktop"
    $watcher = New-Object System.IO.FileSystemWatcher
    $watcher.Path = $watchedFolder

    Register-ObjectEvent -InputObject $watcher -EventName Created -SourceIdentifier File.Created -Action { Do-Something "Created" $event }
    Register-ObjectEvent -InputObject $watcher -EventName Deleted -SourceIdentifier File.Deleted -Action { Do-Something "Deleted" $event }
    Register-ObjectEvent -InputObject $watcher -EventName Changed -SourceIdentifier File.Changed -Action { Do-Something "Changed" $event }
    Register-ObjectEvent -InputObject $watcher -EventName Renamed -SourceIdentifier File.Renamed -Action { Do-Something "Renamed" $event }
}

$encodedBlock = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($block))

Start-Process PowerShell.exe -verb Runas -argumentlist '-WindowStyle Hidden', '-NoExit', '-EncodedCommand', $encodedBlock

观看实际操作


  1. 运行保存的脚本。
    运行保存的脚本。

  2. 您将看到一个控制台窗口闪烁,它们关闭后,其正在运行的唯一指示将是几个新进程。
    在此处输入图片描述

  3. 在你的桌面上做一些事情来测试。
    在此处输入图片描述

  4. 当您不再希望运行创建的 PowerShell 进程时,请结束它。

一些背景信息- 如果您不熟悉此答案中使用的工具。


  • 欲了解更多信息,System.IO.FileSystemWatcher请访问MSDN 页面
  • 有关 PowerShell 中事件的更多示例,请访问此处我觉得很有用的博客
  • 对于 Windows PowerShell 的入门知识,我发现这个网站很有用(我喜欢他们今天的小贴士)。
  • 如果你使用的是旧版本的 Windows,或者由于某种原因你没有安装 PowerShell,你可以下载Windows 管理框架 4.0

答案3

同步是一款独立的实用程序,可让您定期同步硬盘、软盘、LAN、USB 密钥、CD-DVD(带数据包写入软件)和 FTP 服务器上的两个或多个文件夹。这不是问题的关键,但我能找到最接近的东西。

我也在寻找 Robocopy 中 1 分钟最短时间的解决方案,并发现了这个两年前的问题。我最终得到了这个软件的推荐,这就是我正在使用的。顺便说一句,我与该软件没有任何关系。

优点:

  • 具有实时同步。
  • 可以添加多个文件夹对,并使用旁边的复选框选择在给定时间处于活动状态的对。
  • 无需安装程序,独立程序。
  • 您可以通过单击“过滤器”按钮根据模式或修改时间排除或包含文件。
  • (其他;见下面的截图。复选框和按钮有额外的帮助工具提示。)

缺点:

  • 是一个 GUI 实用程序,没有可用的命令行开关
  • 文件夹对都共享相同的设置

截屏

实时同步选项在屏幕截图的“特殊选项”部分下标记。这似乎是问题所描述的目标。如果没有选中并且您没有设置计时器,那么您可以单击“同步”按钮以启动一次性同步。

如何同步两个文件夹:

  • 使用左上角的浏览对话框选择您想要监控的源文件夹。
  • 在右上角选择要将更改复制到的目标文件夹。
  • (可选)如果您手动输入文件夹路径而不是使用浏览对话框,请单击顶部两个框之间的“测试”按钮,查看这些文件夹是否确实存在。在大多数情况下,您还需要选中“如果不存在则创建文件夹”,以确保新文件夹被复制,因为默认情况下未选中该选项,因此程序默认仅复制文件。
  • 勾选“实时同步”复选框。同步现已激活,左侧文件夹的所有更改都将复制到右侧文件夹。

我也发现了这个Youtube 视频,显示软件的运行情况。它显示的是旧版本,选项不在同一个位置,但它提供了软件运行方式的感受。

答案4

使用 /MON 1 开关,每次文件更改时,robocopy 都会同步

相关内容