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

nhi*_*kle 12 command-line robocopy windows-8

Robocopy可以选择监视源目录,并复制任何有更改的文件。您可以指定前先复制(在目录中的许多变化必须发生/mon n在那里n是变化的数量),并等待多久才重新扫描(/mot t这里t是在几分钟内等待的时间)。

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

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

Jos*_*eph 18

您的标签表明您使用的是 Windows 8。这很好,因为您拥有强大的 PowerShell 工具和一个名为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
Run Code Online (Sandbox Code Playgroud)

看到它在行动


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

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

  3. 在桌面上做一些事情来测试。
    在此处输入图片说明

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

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


  • 这是最好的答案。此解决方案是事件驱动的,这意味着它在发生更改之前从不使用 cpu,然后程序立即运行以进行响应。此外,优秀的写作。 (2认同)

Ani*_*han 9

机器人复制

/mot:<M>
Monitors source, and runs again in M minutes if changes are detected.
Run Code Online (Sandbox Code Playgroud)

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


小智 6

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

我也在寻找 Robocopy 中 1 分钟最短时间的解决方案,并发现了这个两年前的问题。我最终向我推荐了这个软件,这就是我正在使用的。郑重声明,我与该软件没有任何隶属关系。

优点:

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

缺点:

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

截屏

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

如何同步两个文件夹:

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

我还发现了这个YouTube 视频,它展示了该软件的运行情况。它显示了一个旧版本,选项不在同一个地方,但它提供了软件如何工作的感觉。