Robocopy peut-il surveiller des fichiers sur un incrément de temps inférieur à une minute?

10

Robocopya la possibilité de surveiller le répertoire source et de copier tous les fichiers modifiés. Vous pouvez spécifier le nombre de modifications dans le répertoire qui doivent se produire avant la copie ( /mon nnest le nombre de modifications) et le temps d'attente avant la nouvelle analyse ( /mot ttest le temps d'attente en minutes).

J'aimerais surveiller un dossier presque en continu, car il n'y a qu'un seul fichier que je recherche et je veux que les modifications soient essentiellement instantanées. Je n'arrive pas à faire de robocopy monitor pendant une durée inférieure à une minute. J'ai essayé /mot 0.5et ça échoue. J'ai également essayé /mot 0et robocopy se ferme juste après la numérisation, sans surveillance continue.

Comment puis-je faire en sorte que robocopy numérise un dossier presque en continu, avec des incréments de temps inférieurs à 1 minute? Sinon, existe-t-il un autre outil en ligne de commande qui peut surveiller en permanence une source de fichiers et copier les modifications en temps réel?

nhinkle
la source
Faut-il être Robocopy?
Ƭᴇcʜιᴇ007
@ techie007 s'il y a autre chose qui répond aux mêmes exigences, ce serait bien, même si j'aimerais éviter les outils tiers si possible. Mais s'il existe une solution parfaite qui est tierce, je suis prêt à y réfléchir.
nhinkle
@ techie007 - J'ai exactement le même problème que nhinkle, et j'utilise Robocopy de la même manière. Si vous connaissez une solution alternative qui fonctionne bien sous Windows, je suis ouvert à elle. Veuillez le partager avec nous
Durden81
Tester Freefilesync maintenant .. il semble que ce soit l'outil dont j'avais besoin.
Durden81

Réponses:

8

Robocopie

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

Comme il n'accepte que quelques minutes comme argument, je suppose que vous ne pouvez pas le forcer à s'exécuter plus souvent. Vous pouvez cependant l'exécuter à l'aide d'un fichier de commandes et laisser le chronométrage et la boucle se produire dans le fichier de commandes ou dans les tâches planifiées plutôt que dans robocopy.

Anirudh Ramanathan
la source
1
ouais, j'utilise "ping -n 1 -w 500 1.2.3.4> NUL" pour dormir une demi-seconde, puis je boucle avec un: LABEL et une instruction GOTO (en cmd)
Stig Eide
13

Vos balises indiquent que vous utilisez Windows 8. C'est bien, car vous avez le grand outil qu'est PowerShell et une petite applet de commande pratique nommée Register-ObjectEvent.

Créez un fichier texte, changez l'extension en .ps1, collez le script ci-dessous dans le fichier. Modifiez la $watchedFoldervariable dans le dossier que vous souhaitez regarder. Modifiez la fonction Do-Something pour inclure votre commande robocopy ou autre chose. Exécutez le script, tant que le script est en cours d'exécution, cette fonction s'exécutera (presque instantanément!) Chaque fois qu'un fichier ou un dossier est modifié dans le dossier surveillé.

Vous pourriez avoir ce script exécuté au démarrage de Windows et il s'exécuterait en arrière-plan à tout moment sans utiliser de minuteur.

$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

Voyez-le en action


  1. Exécutez le script enregistré.
    Exécutez le script enregistré.

  2. Vous verrez une fenêtre de console clignoter, après la fermeture, la seule indication qu'il fonctionne sera quelques nouveaux processus.
    entrez la description de l'image ici

  3. Faites des tests sur votre bureau.
    entrez la description de l'image ici

  4. Mettez fin au processus PowerShell créé lorsque vous ne souhaitez plus qu'il s'exécute.

Quelques informations générales - Au cas où vous ne seriez pas familier avec les outils utilisés dans cette réponse.


  • Pour plus d'informations sur System.IO.FileSystemWatchers'il vous plaît visitez sa page MSDN .
  • Pour plus d'exemples d'événements dans PowerShell, visitez ce blog que j'ai trouvé utile .
  • Pour une introduction sur Windows PowerShell, j'ai trouvé ce site utile (j'aime leurs conseils du jour).
  • Si vous utilisez une ancienne version de Windows ou pour une raison quelconque, vous n'avez pas installé PowerShell, vous pouvez télécharger Windows Management Framework 4.0 .
Joseph
la source
1
C'est la meilleure réponse. Cette solution est pilotée par les événements, ce qui signifie qu'elle n'utilise jamais le processeur jusqu'à ce qu'un changement se produise, puis le programme s'exécute immédiatement en réponse. En outre, une excellente rédaction.
CoolHandLouis
5

DSynchronize est un utilitaire autonome qui vous permet de synchroniser périodiquement deux ou plusieurs dossiers sur disque dur, disquette, LAN, clé USB, CD-DVD (avec logiciel d'écriture de paquets) et serveur FTP. Ce n'est pas exactement de quoi il s'agit, mais la chose la plus proche que j'ai pu trouver.

Moi aussi, je cherchais une solution au temps minimum d'une minute dans Robocopy et j'ai trouvé cette question vieille de deux ans. J'ai fini par me proposer ce logiciel, et c'est ce que j'utilise. Pour mémoire, je n'ai aucune affiliation avec le logiciel.

Avantages:

  • A une synchronisation en temps réel.
  • Peut ajouter plusieurs paires de dossiers et choisir les paires actives à un moment donné à l'aide des cases à cocher à côté d'eux.
  • Aucun programme d'installation, programme autonome.
  • Vous pouvez exclure ou inclure des fichiers par le biais de modèles ou par modification d'heure en cliquant sur le bouton «Filtre».
  • (autres; voir capture d'écran ci-dessous. Les cases à cocher et les boutons ont des info-bulles d'aide supplémentaires.)

Les inconvénients:

  • Est un utilitaire graphique, aucun commutateur de ligne de commande disponible
  • Les paires de dossiers partagent toutes les mêmes paramètres

capture d'écran

L'option de synchronisation en temps réel est indiquée dans la capture d'écran sous la section «Options spéciales». Ce serait ce que la question semble décrire comme le but. Si elle n'est pas cochée et que vous n'avez pas de minuterie, vous pouvez cliquer sur le bouton «Synchroniser» pour démarrer une synchronisation unique.

Comment synchroniser deux dossiers:

  • Sélectionnez un dossier source que vous souhaitez surveiller en utilisant la boîte de dialogue de navigation dans le coin supérieur gauche.
  • Sélectionnez un dossier de destination dans lequel vous souhaitez copier les modifications dans le coin supérieur droit.
  • (Facultatif) Si vous avez tapé manuellement le chemin du dossier au lieu d'utiliser la boîte de dialogue de navigation, cliquez sur le bouton 'TEST' entre les deux cases en haut pour voir si ces dossiers existent réellement. Vous voudrez également vérifier le 'Créer un dossier s'il n'existe pas' dans la plupart des cas pour vous assurer que les nouveaux dossiers sont copiés sur, car il n'est pas coché par défaut et donc le programme copie uniquement les fichiers par défaut.
  • Cochez la case «Synchronisation en temps réel». La synchronisation est maintenant active et toutes les modifications du dossier de gauche seront copiées dans le dossier de droite.

J'ai également trouvé cette vidéo YouTube , qui montre le logiciel en action. Il montre une ancienne version et les options ne sont pas au même endroit, mais il donne une idée du fonctionnement du logiciel.

Ashley Wilson
la source
La question demande comment faire bouger les choses (dans Robocopy). C'est bien de suggérer une solution alternative, expliquant comment obtenir le même résultat en utilisant un autre outil. Cependant, cela n'explique pas comment résoudre réellement le problème.
fixer1234
@ fixer1234 J'avais initialement l'intention de commenter la question, mais apparemment mon compte est trop nouveau pour le faire (je peux commenter ma propre réponse, apparemment). Moi aussi, je cherchais une solution au temps minimum d'une minute en robocopie et j'ai trouvé cette question vieille de deux ans. J'ai fini par me proposer le logiciel ci-dessus, et c'est ce que j'utilise. Penser que d'autres dans la même situation le trouveraient utile, c'est tout. Pour une tâche apparemment simple (synchronisation de dossiers), il est étonnant de voir combien vous devez rechercher pour trouver une solution.
Ashley Wilson
En ce qui concerne la clarté de ma réponse - j'aimerais pouvoir joindre la capture d'écran (encore une fois, le compte est trop nouveau pour permettre cela) qui l'aurait rendu beaucoup plus clair - c'est une interface graphique à un écran et toutes les options sont clairement visibles et simples comprendre.
Ashley Wilson
Si vous utilisez un service de partage de fichiers, ajoutez simplement un lien vers votre image et quelqu'un l'intégrera pour vous. Si vous n'en utilisez pas régulièrement, il y en a beaucoup gratuitement (comme imgur.com).
fixer1234
Voici la capture d'écran: i.imgur.com/F7heg9A.png
Ashley Wilson