Kann Robocopy Dateien in einem Zeitschritt von weniger als einer Minute überwachen?

10

Robocopyhat die Option, das Quellverzeichnis zu überwachen und alle Dateien mit Änderungen zu kopieren. Sie können angeben, wie viele Änderungen im Verzeichnis vor dem Kopieren vorgenommen werden müssen ( /mon nwo nist die Anzahl der Änderungen) und wie lange vor dem erneuten Scannen gewartet werden muss ( /mot two tin Minuten gewartet werden muss).

Ich möchte einen Ordner fast ununterbrochen überwachen, da ich nur eine Datei scanne und Änderungen im Grunde genommen sofort erfolgen sollen. Ich kann nicht scheinen, Robocopy-Monitor für eine Zeitspanne von weniger als einer Minute zu machen. Ich habe es versucht /mot 0.5und es schlägt fehl. Ich habe auch versucht, /mot 0Robocopy nur nach einmaligem Scannen zu beenden, ohne es kontinuierlich zu überwachen.

Wie kann ich einen Ordner nahezu kontinuierlich mit Robocopy-Scans in Zeitschritten von weniger als 1 Minute scannen lassen? Gibt es alternativ ein anderes Befehlszeilentool, das eine Dateiquelle ständig überwachen und Änderungen in Echtzeit kopieren kann?

nhinkle
quelle
MUSS Robocopy sein?
Ƭᴇcʜιᴇ007
@ techie007 Wenn es noch etwas gibt, das die gleichen Anforderungen erfüllt, wäre das in Ordnung, obwohl ich Tools von Drittanbietern nach Möglichkeit vermeiden möchte. Aber wenn es eine perfekte Lösung für Dritte gibt, bin ich bereit, darüber nachzudenken.
nhinkle
@ techie007 - Ich habe genau das gleiche Problem wie nhinkle und verwende Robocopy genauso. Wenn Sie eine alternative Lösung kennen, die unter Windows gut funktioniert, bin ich offen dafür. Bitte teilen Sie es mit uns
Durden81
Testen Sie Freefilesync jetzt. Es scheint das Werkzeug zu sein, das ich brauchte.
Durden81

Antworten:

8

Robocopy

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

Da es nur Minuten als Argument akzeptiert, kann man es wohl nicht zwingen, öfter zu laufen. Sie können es jedoch mit einer Batch-Datei ausführen und das Timing & Looping in der Batch-Datei oder bei geplanten Aufgaben anstatt innerhalb der Robocopy ausführen lassen.

Anirudh Ramanathan
quelle
1
Ja, ich benutze "ping -n 1 -w 500 1.2.3.4> NUL", um eine halbe Sekunde zu schlafen, und schleife es dann mit einem: LABEL und einer GOTO-Anweisung (in cmd)
Stig Eide
13

Ihre Tags geben an, dass Sie Windows 8 verwenden. Dies ist gut, da Sie das großartige Tool PowerShell und ein praktisches kleines Cmdlet mit dem Namen haben Register-ObjectEvent.

Erstellen Sie eine Textdatei, ändern Sie die Erweiterung in .ps1und fügen Sie das folgende Skript in die Datei ein. Ändern Sie die $watchedFolderVariable in den Ordner, den Sie überwachen möchten. Ändern Sie die Do-Something-Funktion so, dass sie Ihren Robocopy-Befehl oder was auch immer enthält. Führen Sie das Skript aus, solange das Skript ausgeführt wird. Diese Funktion wird (fast sofort!) Ausgeführt, wenn eine Datei oder ein Ordner im überwachten Ordner geändert wird.

Sie könnten dieses Skript beim Start von Windows ausführen lassen und es würde jederzeit im Hintergrund ausgeführt, ohne einen Timer zu verwenden.

$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


  1. Führen Sie das gespeicherte Skript aus.
    Führen Sie das gespeicherte Skript aus.

  2. Sie werden sehen, dass ein Konsolenfenster blinkt. Nach dem Schließen werden nur einige neue Prozesse angezeigt.
    Geben Sie hier die Bildbeschreibung ein

  3. Machen Sie einige Dinge auf Ihrem Desktop, um sie zu testen.
    Geben Sie hier die Bildbeschreibung ein

  4. Beenden Sie den erstellten PowerShell-Prozess, wenn Sie nicht mehr möchten, dass er ausgeführt wird.

Einige Hintergrundinformationen - Falls Sie mit den in dieser Antwort verwendeten Tools nicht vertraut sind.


Joseph
quelle
1
Dies ist die beste Antwort. Diese Lösung ist ereignisgesteuert, dh sie verwendet erst dann eine CPU, wenn eine Änderung eintritt, und das Programm wird sofort als Antwort ausgeführt. Auch ausgezeichnetes Schreiben.
CoolHandLouis
5

DSynchronize ist ein eigenständiges Dienstprogramm, mit dem Sie regelmäßig zwei oder mehr Ordner auf Festplatte, Diskette, LAN, USB-Stick, CD-DVD (mit Paketschreibsoftware) und FTP-Server synchronisieren können. Es ist nicht genau das, worum es bei der Frage geht, aber das Nächste, was ich finden konnte.

Auch ich suchte nach einer Lösung für die Mindestzeit von 1 Minute in Robocopy und fand diese zwei Jahre alte Frage. Am Ende wurde mir diese Software vorgeschlagen, und genau das verwende ich. Für die Aufzeichnung habe ich keine Zugehörigkeit zur Software.

Vorteile:

  • Hat Echtzeitsynchronisation.
  • Sie können mehrere Ordnerpaare hinzufügen und mithilfe von Kontrollkästchen neben diesen auswählen, welche Paare zu einem bestimmten Zeitpunkt aktiv sind.
  • Kein Installationsprogramm, eigenständiges Programm.
  • Sie können Dateien durch Muster oder nach geänderter Zeit ausschließen oder einschließen, indem Sie auf die Schaltfläche "Filter" klicken.
  • (andere; siehe Screenshot unten. Die Kontrollkästchen und Schaltflächen enthalten zusätzliche Hilfetools.)

Nachteile:

  • Ist ein GUI-Dienstprogramm, sind keine Befehlszeilenoptionen verfügbar
  • Ordnerpaare haben alle die gleichen Einstellungen

Bildschirmfoto

Die Echtzeit-Synchronisierungsoption ist im Screenshot unter dem Abschnitt 'Spezielle Optionen' markiert. Dies scheint die Frage als Ziel zu beschreiben. Wenn dies nicht aktiviert 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 Dialog zum Durchsuchen zu verwenden, klicken Sie auf die Schaltfläche 'TEST' zwischen den beiden Feldern oben, um festzustellen, ob diese Ordner tatsächlich vorhanden sind. In den meisten Fällen sollten Sie auch den Ordner "Ordner erstellen, falls nicht vorhanden" aktivieren, um sicherzustellen, dass neue Ordner kopiert werden, da diese standardmäßig deaktiviert sind und das Programm standardmäßig nur Dateien kopiert.
  • Aktivieren Sie das Kontrollkästchen "Echtzeitsynchronisierung". Die Synchronisierung ist jetzt aktiv und alle Änderungen aus dem linken Ordner werden in den rechten Ordner kopiert.

Ich habe auch dieses YouTube-Video gefunden , das die Software in Aktion zeigt. Es zeigt eine ältere Version und die Optionen befinden sich nicht an derselben Stelle, vermittelt jedoch ein Gefühl für die Funktionsweise der Software.

Ashley Wilson
quelle
Die Frage lautet, wie etwas geschehen kann (in Robocopy). Es ist in Ordnung, eine alternative Lösung vorzuschlagen, in der erklärt wird, wie mit einem anderen Tool dasselbe Ergebnis erzielt werden kann. Dies erklärt jedoch nicht, wie das Problem tatsächlich gelöst werden kann.
Fixer1234
@ fixer1234 Ich hatte ursprünglich nur vor, die Frage zu kommentieren, aber anscheinend ist mein Konto zu neu, um dies zu tun (ich kann anscheinend meine eigene Antwort kommentieren). Auch ich suchte nach einer Lösung für die Mindestzeit von 1 Minute in der Robokopie und fand diese zwei Jahre alte Frage. Am Ende wurde mir die oben genannte Software vorgeschlagen, und das verwende ich. Dachte, andere in der gleichen Situation würden es nützlich finden, das ist alles. Für eine scheinbar einfache Aufgabe (Ordnersynchronisierung) ist es erstaunlich, wie viel Sie suchen müssen, um eine Lösung zu finden.
Ashley Wilson
Aus Gründen der Klarheit meiner Antwort - ich wünschte, ich könnte den Screenshot anhängen (wieder ist das Konto zu neu, um dies zuzulassen), was es viel klarer gemacht hätte - ist es eine Ein-Bildschirm-GUI und alle Optionen sind klar sichtbar und einfach verstehen.
Ashley Wilson
Wenn Sie einen Dateifreigabedienst verwenden, fügen Sie einfach einen Link zu Ihrem Bild hinzu, und jemand wird ihn für Sie einbetten. Wenn Sie nicht regelmäßig eine verwenden, gibt es viele kostenlose (wie imgur.com).
Fixer1234
Dies ist der Screenshot: i.imgur.com/F7heg9A.png
Ashley Wilson