Robocopy 能否以小於一分鐘的時間增量監控檔案?

Robocopy 能否以小於一分鐘的時間增量監控檔案?

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 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 Key、CD-DVD(帶有資料包寫入軟體)和 FTP 伺服器上的兩個或多個資料夾。這不完全是問題所在,而是我能找到的最接近的東西。

我也在 Robocopy 中尋找 1 分鐘最短時間的解決方案,並發現了這個兩年前的問題。最後有人向我推薦了這個軟體,這就是我正在使用的。根據記錄,我與該軟體沒有任何關係。

優點:

  • 具有即時同步功能。
  • 可以新增多個資料夾對,並使用它們旁邊的複選框選擇在給定時間哪些對處於活動狀態。
  • 無需安裝程序,獨立程序。
  • 您可以透過點擊“過濾器”按鈕透過模式或修改時間排除或包含檔案。
  • (其他;請參見下面的螢幕截圖。複選框和按鈕有額外的幫助工具提示。)

缺點:

  • 是一個 GUI 實用程序,沒有可用的命令列開關
  • 資料夾對都共享相同的設置

螢幕截圖

螢幕截圖中的「特殊選項」部分下標記了即時同步選項。這就是問題所描述的目標。如果未選取它且您沒有設定計時器,那麼您可以按一下「同步」按鈕來啟動一次性同步。

如何同步兩個資料夾:

  • 使用左上角的瀏覽對話方塊選擇要監視的來源資料夾。
  • 在右上角選擇要將變更複製到的目標資料夾。
  • (可選)如果您手動輸入資料夾路徑而不是使用瀏覽對話框,請單擊頂部兩個框之間的“測試”按鈕以查看這些資料夾是否確實存在。在大多數情況下,您還需要檢查“如果不存在則建立資料夾”,以確保複製新資料夾,因為預設未選取該選項,因此程式預設僅複製檔案。
  • 勾選“即時同步”複選框。同步現已激活,左側資料夾中的所有變更都將複製到右側資料夾。

我也發現了這個Youtube 視頻,它顯示了正在運行的軟體。它顯示的是較舊的版本,選項不在同一位置,但它提供了軟體如何運作的感覺。

答案4

使用 /MON 1 開關,每次檔案變更時 robocopy 都會同步

相關內容