Robocopy può monitorare i file con un incremento temporale inferiore a un minuto?


10

Robocopyha l'opzione per monitorare la directory di origine e copiarla su tutti i file che hanno delle modifiche. È possibile specificare quante modifiche nella directory devono verificarsi prima della copia ( /mon ndov'è nil numero di modifiche) e quanto attendere prima di ripetere la scansione ( /mot tdov'è til tempo di attesa in minuti).

Vorrei monitorare una cartella quasi ininterrottamente, poiché c'è solo 1 file che sto cercando e voglio che le modifiche siano sostanzialmente istantanee. Tuttavia, non riesco a realizzare un monitor robocopy per un periodo di tempo inferiore a un minuto. Ci ho provato /mot 0.5e non ci riesce. Ho anche provato /mot 0e robocopy esce solo dopo la scansione una volta, senza monitorare continuamente.

Come posso fare in modo che robocopy esegua la scansione di una cartella quasi continuamente, con incrementi di tempo inferiori a 1 minuto? In alternativa, esiste un altro strumento da riga di comando in grado di monitorare costantemente un'origine file e copiare le modifiche in tempo reale?


DEVE essere Robocopy?
Ƭᴇcʜιᴇ007,

@ techie007 se c'è qualcos'altro che soddisfa gli stessi requisiti, andrebbe bene, anche se mi piacerebbe evitare strumenti di terze parti, se possibile. Ma se esiste una soluzione perfetta di terze parti, sono disposto a considerarla.
nhinkle,

@ techie007 - Ho lo stesso problema esatto di nhinkle e sto usando Robocopy nello stesso modo esatto. Se conosci una soluzione alternativa che funziona bene su Windows, sono aperto ad essa. Per favore, condividilo con noi
Durden81,

Testare Freefilesync ora .. sembra essere lo strumento di cui avevo bisogno.
Durden81,

Risposte:


8

Robocopy

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

Dato che accetta solo minuti come argomento, immagino che non puoi costringerlo a correre più spesso. Tuttavia, è possibile eseguirlo utilizzando un file batch e lasciare che il timing e il loop si verifichino nel file batch o nelle attività pianificate anziché all'interno di robocopy.


1
sì, uso "ping -n 1 -w 500 1.2.3.4> NUL" per dormire mezzo secondo, quindi eseguo il ciclo con un: LABEL e un'istruzione GOTO (in cmd)
Stig Eide

13

I tuoi tag affermano che stai usando Windows 8. Questo è un bene, dato che hai il fantastico strumento PowerShell e un pratico piccolo cmdlet chiamato Register-ObjectEvent.

Crea un file di testo, modifica l'estensione in .ps1, incolla lo script seguente nel file. Cambia la $watchedFoldervariabile nella cartella che vuoi guardare. Cambia la funzione Do-Something per includere il tuo comando robocopy o altro. Esegui lo script, fintanto che lo script è in esecuzione, quella funzione verrà eseguita (quasi istantaneamente!) Ogni volta che un file o una cartella viene modificato nella cartella controllata.

È possibile che questo script venga eseguito all'avvio di Windows e che venga sempre eseguito in background senza utilizzare un timer.

$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

Guardalo in azione


  1. Esegui lo script salvato.
    Esegui lo script salvato.

  2. Vedrai una finestra della console lampeggiare, dopo che si chiuderanno l'unica indicazione che è in esecuzione saranno un paio di nuovi processi.
    inserisci qui la descrizione dell'immagine

  3. Fai delle cose sul desktop per testarle.
    inserisci qui la descrizione dell'immagine

  4. Termina il processo PowerShell creato quando non desideri più eseguirlo.

Alcune informazioni di base - Nel caso in cui non si abbia familiarità con gli strumenti utilizzati in questa risposta.


  • Per maggiori informazioni su System.IO.FileSystemWatcher, visita la sua pagina MSDN .
  • Per alcuni altri esempi di eventi in PowerShell visitare questo blog che ho trovato utile .
  • Per un primer su Windows PowerShell ho trovato utile questo sito (mi piacciono i loro consigli del giorno).
  • Se stai utilizzando una versione precedente di Windows o per qualche motivo non hai installato PowerShell, puoi scaricare Windows Management Framework 4.0 .

1
Questa è la risposta migliore Questa soluzione è guidata dagli eventi, il che significa che non utilizza mai cpu fino a quando non si verifica una modifica, quindi il programma viene eseguito immediatamente in risposta. Inoltre, eccellente riscrittura.
CoolHandLouis,

5

DSynchronize è un'utilità autonoma che consente di sincronizzare periodicamente due o più cartelle su disco rigido, floppy disk, LAN, chiave USB, CD-DVD (con software di scrittura di pacchetti) e server FTP. Non si tratta esattamente della domanda, ma della cosa più vicina che ho potuto trovare.

Anch'io cercavo una soluzione per il tempo minimo di 1 minuto in Robocopy e ho trovato questa domanda di due anni. Ho finito con il suggerirmi questo software, ed è quello che sto usando. Per la cronaca, non ho affiliazione con il software.

Professionisti:

  • Ha la sincronizzazione in tempo reale.
  • Può aggiungere più coppie di cartelle e scegliere quali coppie sono attive in un determinato momento utilizzando le caselle di controllo accanto a esse.
  • Nessun programma di installazione, programma autonomo.
  • È possibile escludere o includere file attraverso modelli o in base al tempo modificato facendo clic sul pulsante "filtro".
  • (altri; vedi screenshot di seguito. Le caselle di controllo e i pulsanti hanno ulteriori suggerimenti di aiuto.)

Contro:

  • È un'utilità GUI, non sono disponibili opzioni della riga di comando
  • Le coppie di cartelle condividono tutte le stesse impostazioni

immagine dello schermo

L'opzione di sincronizzazione in tempo reale è contrassegnata nello screenshot nella sezione "Opzioni speciali". Questo sarebbe ciò che la domanda sembra descrivere come obiettivo. Se non è selezionato e non hai impostato un timer, puoi fare clic sul pulsante "Sincronizza" per avviare una sincronizzazione singola.

Come sincronizzare due cartelle:

  • Seleziona una cartella di origine che desideri monitorare utilizzando la finestra di dialogo Sfoglia nell'angolo in alto a sinistra.
  • Seleziona una cartella di destinazione in cui desideri copiare le modifiche nell'angolo in alto a destra.
  • (Facoltativo) Se hai digitato manualmente il percorso della cartella anziché utilizzare la finestra di dialogo Sfoglia, fai clic sul pulsante "TEST" tra le due caselle in alto per vedere se tali cartelle esistono effettivamente. Dovresti anche controllare la 'Crea cartella se non esiste' nella maggior parte dei casi per assicurarti che le nuove cartelle siano copiate, poiché è deselezionata per impostazione predefinita e quindi il programma copia solo i file per impostazione predefinita.
  • Seleziona la casella di controllo "Sincronizzazione in tempo reale". La sincronizzazione è ora attiva e tutte le modifiche dalla cartella del lato sinistro verranno copiate nella cartella del lato destro.

Ho anche trovato questo video di YouTube , che mostra il software in azione. Mostra una versione precedente e le opzioni non sono nello stesso posto, ma fornisce un'idea di come funziona il software.


La domanda chiede come far accadere qualcosa (in Robocopy). Va bene suggerire una soluzione alternativa, spiegando come ottenere lo stesso risultato usando un altro strumento. Tuttavia, questo non spiega come risolvere effettivamente il problema.
fixer 1234

@ fixer1234 Inizialmente avevo solo intenzione di commentare la domanda, ma a quanto pare il mio account è troppo nuovo per farlo (posso commentare la mia risposta, a quanto pare). Anch'io cercavo una soluzione per il tempo minimo di 1 minuto in robocopy e ho trovato questa domanda di due anni. Ho finito per farmi suggerire il software sopra, ed è quello che sto usando. Pensato che altri nella stessa situazione lo troverebbero utile, tutto qui. Per un'attività apparentemente semplice (sincronizzazione delle cartelle), è incredibile quanto devi cercare per trovare una soluzione ..
Ashley Wilson

Per quanto riguarda la chiarezza della mia risposta - Vorrei poter allegare lo screenshot (di nuovo, l'account è troppo nuovo per consentirlo) che lo avrebbe reso molto più chiaro - è una GUI a schermo singolo e tutte le opzioni sono chiaramente visibili e semplici capire.
Ashley Wilson,

Se utilizzi un servizio di condivisione file, aggiungi semplicemente un link alla tua immagine e qualcuno lo incorporerà per te. Se non ne usi regolarmente uno, ce ne sono molti gratuiti (come imgur.com).
fixer1234

Questo è lo screenshot: i.imgur.com/F7heg9A.png
Ashley Wilson
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.