Robocopy
hat die Möglichkeit, das Quellverzeichnis zu überwachen und alle geänderten Dateien zu kopieren. Sie können angeben, wie viele Änderungen im Verzeichnis vor dem Kopieren erfolgen müssen ( /mon n
wobei n
die Anzahl der Änderungen ist) und wie lange vor dem erneuten Scannen gewartet werden soll ( /mot t
wobei t
die Wartezeit in Minuten ist).
Ich möchte einen Ordner nahezu kontinuierlich überwachen, da ich nur nach einer Datei suche und Änderungen grundsätzlich sofort vorgenommen werden sollen. Ich kann Robocopy jedoch nicht dazu bringen, für einen Zeitraum von weniger als einer Minute zu überwachen. Ich habe es versucht, /mot 0.5
aber es funktioniert nicht. Ich habe es auch versucht, /mot 0
aber Robocopy wird nach einmaligem Scannen einfach beendet, ohne kontinuierlich zu überwachen.
Wie kann ich Robocopy dazu bringen, einen Ordner nahezu kontinuierlich zu scannen, in Zeitschritten von weniger als 1 Minute? Gibt es alternativ ein anderes Befehlszeilentool, das eine Dateiquelle ständig überwachen und Änderungen in Echtzeit kopieren kann?
Antwort1
/mot:<M>
Monitors source, and runs again in M minutes if changes are detected.
Da es nur Minuten als Argument akzeptiert, können Sie es vermutlich nicht zwingen, öfter zu laufen. Sie können es jedoch mithilfe einer Batchdatei ausführen und die Zeit und Schleife in der Batchdatei oder in geplanten Aufgaben statt in Robocopy ausführen lassen.
Antwort2
Ihre Tags geben an, dass Sie Windows 8 verwenden. Das ist gut, da Sie über das großartige Tool PowerShell und ein praktisches kleines Cmdlet namens verfügen Register-ObjectEvent
.
Erstellen Sie eine Textdatei, ändern Sie die Erweiterung in .ps1
und fügen Sie das folgende Skript in die Datei ein. Ändern Sie die $watchedFolder
Variable in den Ordner, den Sie überwachen möchten. Ändern Sie die Do-Something-Funktion, um Ihren Robocopy-Befehl oder etwas anderes einzuschließen. Führen Sie das Skript aus. Solange das Skript ausgeführt wird, wird diese Funktion (fast sofort!) ausgeführt, wenn eine Datei oder ein Ordner im überwachten Ordner geändert wird.
Sie könnten dieses Skript beim Windows-Start ausführen, sodass es die ganze Zeit im Hintergrund läuft, ohne dass ein Timer verwendet wird.
$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
Sehen Sie es in Aktion
Führen Sie das gespeicherte Skript aus.
Sie sehen ein aufblinkendes Konsolenfenster. Nach dem Schließen weisen nur ein paar neue Prozesse darauf hin, dass es ausgeführt wird.
Führen Sie zum Testen einige Aktionen auf Ihrem Desktop aus.
- Beenden Sie den erstellten PowerShell-Prozess, wenn Sie ihn nicht mehr ausführen möchten.
Einige Hintergrundinformationen– Falls Sie mit den in dieser Antwort verwendeten Tools nicht vertraut sind.
- Weitere Informationen
System.IO.FileSystemWatcher
finden Sie unterMSDN-Seite. - Weitere Beispiele für Ereignisse in PowerShell finden Sie hierBlog, den ich nützlich fand.
- Für eine Einführung in Windows PowerShell habe ichdiese Seite ist nützlich(Mir gefallen ihre Tipps des Tages).
- Wenn Sie eine ältere Version von Windows verwenden oder aus irgendeinem Grund PowerShell nicht installiert haben, können Sie dieWindows Management Framework 4.0.
Antwort3
DSynchronisierenist ein eigenständiges Dienstprogramm, mit dem Sie regelmäßig zwei oder mehr Ordner auf Festplatte, Diskette, LAN, USB-Stick, CD-DVD (mit Packet-Writing-Software) und FTP-Server synchronisieren können. Das ist nicht genau das, worum es in der Frage geht, aber das Nächstliegende, was ich finden konnte.
Auch ich suchte nach einer Lösung für die 1-Minuten-Mindestzeit in Robocopy und fand diese zwei Jahre alte Frage. Am Ende wurde mir diese Software vorgeschlagen, und die verwende ich. Der Vollständigkeit halber sei erwähnt, dass ich mit der Software nichts zu tun habe.
Vorteile:
- Verfügt über Echtzeitsynchronisierung.
- Sie können mehrere Ordnerpaare hinzufügen und mithilfe der daneben stehenden Kontrollkästchen auswählen, welche Paare zu einem bestimmten Zeitpunkt aktiv sind.
- Kein Installationsprogramm, eigenständiges Programm.
- Sie können Dateien anhand von Mustern oder Änderungszeitpunkten ausschließen oder einschließen, indem Sie auf die Schaltfläche „Filtern“ klicken.
- (andere; siehe Screenshot unten. Die Kontrollkästchen und Schaltflächen haben zusätzliche Hilfe-Tooltips.)
Nachteile:
- Ist ein GUI-Dienstprogramm, keine Befehlszeilenschalter verfügbar
- Ordnerpaare haben alle die gleichen Einstellungen
Die Option zur Echtzeitsynchronisierung ist im Screenshot unter dem Abschnitt „Spezielle Optionen“ markiert. Dies scheint das Ziel zu sein, das in der Frage beschrieben wird. Wenn sie nicht markiert ist und Sie keinen Timer eingestellt haben, können Sie auf die Schaltfläche „Synchronisieren“ klicken, um eine einmalige Synchronisierung zu starten.
So synchronisieren Sie zwei Ordner:
- Wählen Sie mithilfe des Suchdialogs in der oberen linken Ecke einen Quellordner aus, den Sie überwachen möchten.
- Wählen Sie oben rechts einen Zielordner aus, in den Sie die Änderungen kopieren möchten.
- (Optional) Wenn Sie den Ordnerpfad manuell eingegeben haben, anstatt den Suchdialog zu verwenden, klicken Sie auf die Schaltfläche „TEST“ zwischen den beiden Feldern oben, um zu prüfen, ob diese Ordner tatsächlich vorhanden sind. In den meisten Fällen sollten Sie auch „Ordner erstellen, falls nicht vorhanden“ aktivieren, um sicherzustellen, dass neue Ordner kopiert werden, da diese Option standardmäßig deaktiviert ist und das Programm daher standardmäßig nur Dateien kopiert.
- Aktivieren Sie das Kontrollkästchen „Echtzeitsynchronisierung“. Die Synchronisierung ist nun aktiv und alle Änderungen aus dem linken Ordner werden in den rechten Ordner kopiert.
Ich fand auch diesYouTube-Video, das die Software in Aktion zeigt. Es zeigt eine ältere Version und die Optionen sind nicht an derselben Stelle, aber es vermittelt ein Gefühl dafür, wie die Software funktioniert.
Antwort4
Verwenden Sie den Schalter /MON 1. Jedes Mal, wenn die Datei geändert wird, synchronisiert Robocopy