¿Puede Robocopy monitorear archivos en un incremento de tiempo de menos de un minuto?

10

Robocopytiene la opción de monitorear el directorio fuente y copiar cualquier archivo que tenga cambios. Puede especificar cuántos cambios en el directorio deben ocurrir antes de copiar ( /mon ndónde nes el número de cambios) y cuánto tiempo esperar antes de volver a escanear ( /mot tdónde tes el tiempo de espera en minutos).

Me gustaría monitorear una carpeta casi continuamente, ya que solo estoy buscando un archivo, y quiero que los cambios sean básicamente instantáneos. Sin embargo, parece que no puedo hacer un monitor robocopy por un intervalo de tiempo de menos de un minuto. Lo he intentado /mot 0.5y falla. También probé /mot 0y robocopy acaba de salir después de escanear una vez, sin monitoreo continuo.

¿Cómo puedo hacer que robocopy escanee una carpeta casi continuamente, con incrementos de tiempo de menos de 1 minuto? Alternativamente, ¿hay alguna otra herramienta de línea de comando que pueda monitorear constantemente el origen de un archivo y copiar los cambios en tiempo real?

nhinkle
fuente
¿Tiene que ser Robocopy?
Ƭᴇcʜιᴇ007
@ techie007 si hay algo más que cumpla los mismos requisitos, estaría bien, aunque me gustaría evitar las herramientas de terceros si es posible. Pero si hay una solución perfecta que sea de terceros, entonces estoy dispuesto a considerarla.
nhinkle
@ techie007 - Tengo el mismo problema exacto que nhinkle, y estoy usando Robocopy de la misma manera. Si conoce una solución alternativa que funcione bien en Windows, estoy abierto a ella. Por favor compártelo con nosotros
Durden81
Probando Freefilesync ahora ... parece ser la herramienta que necesitaba.
Durden81

Respuestas:

8

Robocopy

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

Como solo acepta minutos como argumento, supongo que no puede forzarlo a ejecutarse con más frecuencia. Sin embargo, puede ejecutarlo utilizando un archivo por lotes y dejar que la sincronización y el bucle se produzcan en el archivo por lotes o en tareas programadas en lugar de dentro de la robocopia.

Anirudh Ramanathan
fuente
1
Sí, uso "ping -n 1 -w 500 1.2.3.4> NUL" para dormir medio segundo, luego lo repito con un: LABEL y una declaración GOTO (en cmd)
Stig Eide
13

Sus etiquetas indican que está utilizando Windows 8. Esto es bueno, ya que tiene la gran herramienta que es PowerShell y un pequeño cmdlet útil llamado Register-ObjectEvent.

Cree un archivo de texto, cambie la extensión a .ps1, pegue el siguiente script en el archivo. Cambie la $watchedFoldervariable a la carpeta que desea ver. Cambie la función Do-Something para incluir su comando robocopy o lo que sea. Ejecute el script, mientras el script se esté ejecutando, esa función se ejecutará (¡casi instantáneamente!) Cada vez que se cambie un archivo o carpeta en la carpeta observada.

Podría ejecutar este script al inicio de Windows y se estaría ejecutando en segundo plano en todo momento sin usar un temporizador.

$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

Véalo en acción


  1. Ejecute el script guardado.
    Ejecute el script guardado.

  2. Verá parpadear una ventana de la consola, después de que se cierren, la única indicación de que se está ejecutando será un par de procesos nuevos.
    ingrese la descripción de la imagen aquí

  3. Haga algunas cosas en su escritorio para probar.
    ingrese la descripción de la imagen aquí

  4. Finalice el proceso de PowerShell creado cuando ya no desee que se ejecute.

Información de antecedentes : en caso de que no esté familiarizado con las herramientas utilizadas en esta respuesta.


  • Para obtener más información System.IO.FileSystemWatcher, visite su página de MSDN .
  • Para obtener más ejemplos de eventos en PowerShell, visite este blog que encontré útil .
  • Para una introducción a Windows PowerShell, he encontrado que este sitio es útil (me gustan sus consejos del día).
  • Si está utilizando una versión anterior de Windows o por alguna razón no tiene instalado PowerShell, puede descargar Windows Management Framework 4.0 .
José
fuente
1
Esta es la mejor respuesta. Esta solución está basada en eventos, lo que significa que nunca usa CPU hasta que se produce un cambio, y luego el programa se ejecuta inmediatamente en respuesta. Además, excelente redacción.
CoolHandLouis
5

DSynchronize es una utilidad independiente que le permite sincronizar periódicamente dos o más carpetas en disco duro, disquete, LAN, llave USB, CD-DVD (con software de escritura de paquetes) y servidor FTP. No es exactamente de qué se trata la pregunta, sino lo más cercano que pude encontrar.

Yo también estaba buscando una solución al tiempo mínimo de 1 minuto en Robocopy y encontré esta pregunta de dos años. Terminé teniendo este software sugerido, y eso es lo que estoy usando. Para el registro, no tengo afiliación con el software.

Pros:

  • Tiene sincronización en tiempo real.
  • Puede agregar varios pares de carpetas y elegir qué pares están activos en un momento dado usando las casillas de verificación que se encuentran junto a ellos.
  • Sin instalador, programa independiente.
  • Puede excluir o incluir archivos a través de patrones o por tiempo modificado haciendo clic en el botón 'filtro'.
  • (otros; vea la captura de pantalla a continuación. Las casillas de verificación y los botones tienen información sobre herramientas de ayuda adicional).

Contras:

  • Es una utilidad GUI, no hay interruptores de línea de comandos disponibles
  • Todos los pares de carpetas comparten la misma configuración

captura de pantalla

La opción de sincronización en tiempo real está marcada en la captura de pantalla en la sección 'Opciones especiales'. Esto sería lo que la pregunta parece describir como el objetivo. Si no está marcada y no tiene un temporizador configurado, puede hacer clic en el botón 'Sincronizar' para iniciar una sincronización única.

Cómo sincronizar dos carpetas:

  • Seleccione una carpeta de origen que desee monitorear mediante el diálogo de exploración en la esquina superior izquierda.
  • Seleccione una carpeta de destino donde desea copiar los cambios en la esquina superior derecha.
  • (Opcional) Si ingresó manualmente la ruta de la carpeta en lugar de utilizar el diálogo de exploración, haga clic en el botón 'PRUEBA' entre los dos cuadros en la parte superior para ver si esas carpetas realmente existen. También querrá marcar la opción 'Crear carpeta si no existe' en la mayoría de los casos para asegurarse de que se copien nuevas carpetas, ya que está desmarcada de manera predeterminada y, por lo tanto, el programa solo copia archivos de forma predeterminada.
  • Marque la casilla de verificación 'Sincronización en tiempo real'. La sincronización ahora está activa, y todos los cambios de la carpeta del lado izquierdo se copiarán en la carpeta del lado derecho.

También encontré este video de YouTube , que muestra el software en acción. Muestra una versión anterior y las opciones no están en el mismo lugar, pero proporciona una idea de cómo funciona el software.

Ashley Wilson
fuente
La pregunta pregunta cómo hacer que algo suceda (en Robocopy). Está bien sugerir una solución alternativa, explicando cómo lograr el mismo resultado usando otra herramienta. Sin embargo, esto no explica cómo resolver realmente el problema.
Fixer1234
@ fixer1234 Originalmente estaba planeando comentar sobre la pregunta, pero aparentemente mi cuenta es demasiado nueva para hacerlo (aparentemente puedo comentar mi propia respuesta). Yo también estaba buscando una solución al tiempo mínimo de 1 minuto en robocopy y encontré esta pregunta de dos años. Terminé teniendo el software anterior sugerido, y eso es lo que estoy usando. Pensé que otros en la misma situación lo encontrarían útil, eso es todo. Para una tarea aparentemente simple (sincronización de carpetas), es sorprendente cuánto tienes que buscar para encontrar una solución ...
Ashley Wilson
En cuanto a la claridad de mi respuesta, desearía poder adjuntar la captura de pantalla (de nuevo, la cuenta es demasiado nueva para permitirlo), lo que lo habría hecho mucho más claro: es una GUI de una pantalla y todas las opciones son claramente visibles y simples comprender.
Ashley Wilson
Si utiliza algún servicio para compartir archivos, simplemente agregue un enlace a su imagen y alguien lo insertará por usted. Si no usa uno regularmente, hay muchos gratuitos (como imgur.com).
Fixer1234
Esta es la captura de pantalla: i.imgur.com/F7heg9A.png
Ashley Wilson el