Robocopy可以在不到一分钟的时间增量内监视文件吗?


10

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

我想几乎连续监视一个文件夹,因为我只扫描一个文件,并且我希望更改基本上是即时的。我似乎不能使robocopy监视器的时间少于一分钟。我试过了/mot 0.5,但失败了。我也尝试过/mot 0,robocopy仅在扫描一次后退出,而没有连续监视。

如何使robocopy以不到1分钟的时间增量连续连续扫描文件夹?另外,是否有其他命令行工具可以持续监视文件源并实时复制更改?


是否必须成为Robocopy?
2012年

@ techie007,如果还有其他东西可以达到相同的要求,那很好,尽管我希望尽可能避免使用第三方工具。但是,如果有第三方的完美解决方案,那么我愿意考虑。
nhinkle 2012年

@ techie007-我和nhinkle有相同的确切问题,并且我以相同的确切方式使用Robocopy。如果您知道在Windows上可以很好运行的替代解决方案,那么我欢迎您。请与我们分享
Durden81

现在测试Freefilesync ..看来这是我需要的工具。
2014年

Answers:


8

机器人复制

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

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


1
是的,我使用“ ping -n 1 -w 500 1.2.3.4> NUL”睡了半秒钟,然后用:LABEL和GOTO语句(在cmd中)循环播放
Stig Eide 2015年

13

您的标签表明您使用的是Windows8。这很好,因为您拥有强大的工具PowerShell和一个名为的方便的小cmdlet Register-ObjectEvent

创建一个文本文件,将扩展名更改为.ps1,将下面的脚本粘贴到该文件中。将$watchedFolder变量更改为要观看的文件夹。更改“做某事”功能以包括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进程。

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



1
这是最好的答案。此解决方案是事件驱动的,这意味着直到发生更改,它才使用cpu,然后程序立即运行以作为响应。此外,出色的写作。
CoolHandLouis

5

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

我也在Robocopy中寻找最短1分钟时间的解决方案,并发现了这个已有两年历史的问题。最后,我得到了该软件的建议,这就是我正在使用的软件。出于记录,我与该软件没有任何从属关系。

优点:

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

缺点:

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

屏幕截图

屏幕快照中“特殊选项”部分标记了实时同步选项。这就是问题似乎形容为目标的内容。如果未选中它,并且您没有设置计时器,则可以单击“同步”按钮开始一次同步。

如何同步两个文件夹:

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

我还找到了这个YouTube视频,其中显示了该软件的使用情况。它显示了一个较旧的版本,并且选项不在同一位置,但是使您对该软件的工作方式有一种感觉。


该问题询问如何使某些事情发生(在Robocopy中)。可以建议一个替代解决方案,解释如何使用其他工具来实现相同的结果。但是,这并不能解释如何真正解决问题。
fixer1234

@ fixer1234我本来只是打算对此问题发表评论,但是显然我的帐户太新了,不能这样做(显然,我可以对自己的回答发表评论)。我也一直在寻找一种解决方案,以解决自动复制最短1分钟的问题,并发现了这个已有两年历史的问题。最后,我得到了上述软件的建议,这就是我正在使用的软件。以为其他处于相同情况的人会发现它有用,仅此而已。对于一个看似简单的任务(文件夹同步),这是惊人的,你有多少搜索找到一个解决方案..
阿什利·威尔逊

至于我的答案是否清晰-我希望我可以附加屏幕截图(同样,该帐户太新了,无法允许该截图)-它是一屏式GUI,所有选项都清晰可见且简单了解。
Ashley Wilson

如果您使用任何文件共享服务,只需在图像上添加一个链接,然后有人会为您嵌入它。如果您不经常使用一个,则有很多免费的(例如imgur.com)。
fixer1234

这是屏幕截图:i.imgur.com/F7heg9A.png
Ashley Wilson
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.