Robocopy
可以选择监视源目录并复制任何有更改的文件。您可以指定在复制之前目录中必须发生多少次更改(/mon n
其中n
是更改次数)以及在重新扫描之前要等待多长时间(/mot t
其中t
是等待的时间(分钟))。
我想几乎连续地监视一个文件夹,因为我只扫描 1 个文件,并且我希望更改基本上是即时的。但我似乎无法让 robocopy 监视少于一分钟的时间跨度。我试过了,但/mot 0.5
失败了。我也试过了/mot 0
,robocopy 在扫描一次后就退出了,没有连续监视。
如何让 robocopy 以小于 1 分钟的时间增量近乎连续地扫描文件夹?或者,是否有其他命令行工具可以持续监视文件源并实时复制更改?
答案1
/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
观看实际操作
运行保存的脚本。
您将看到一个控制台窗口闪烁,它们关闭后,其正在运行的唯一指示将是几个新进程。
在你的桌面上做一些事情来测试。
- 当您不再希望运行创建的 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 都会同步