
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
查看實際效果
運行已儲存的腳本。
您將看到控制台視窗閃爍,在它們關閉後,它正在運行的唯一指示將是幾個新進程。
在桌面上做一些事情來測試。
- 當您不再希望建立的 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 都會同步