¿Cómo monitorear una carpeta en busca de cambios y ejecutar un comando si lo hace en Windows?

32

Hay preguntas similares para Linux y Mac , pero estoy buscando una solución de Windows aquí.

El problema es el siguiente: quiero escribir varios archivos de script (js) en una carpeta, y hacer que un programa monitoree esa carpeta para detectar cambios de archivos y agregar nuevos archivos, y ejecutar un comando siempre que eso suceda (para compilarlos todos en uno archivo único).

La solución tiene que:

  1. Monitoree los cambios de archivos y los nuevos archivos que se agregan, en una carpeta.
  2. Ejecute un comando solo si hay algún cambio.

Sería mejor si es una solución integrada (como un fragmento de JScript o VBscript), o algo que no requiere instalación.

Camilo Martin
fuente
Vea este blog para algunas aplicaciones para Windows.
Vijay

Respuestas:

3

Hay un programa llamado Belvedere que podría hacer el truco.

http://ca.lifehacker.com/341950/belvedere-automates-your-self+cleaning-pc

Es una aplicación de Windows independiente que se ejecuta en segundo plano.

Lo configuré para monitorear mi carpeta de descargas para archivos con ciertas extensiones con las últimas fechas de modificación de un día de antigüedad. Los archivos que encuentra, los elimina, sin embargo, puede hacer que ejecute una acción.

dangowans
fuente
Wow, ese se ve super bien. Elegiré esto como respuesta (incluso si ya obtuve lo que necesitaba de otro) ya que probablemente sea mucho más útil y versátil que el que estoy usando, para otras personas (¡y quizás para mí en el futuro!) . +1 y aceptado!
Camilo Martin
2
Belvedere me hizo perder horas para finalmente descubrir que está lleno de errores no resueltos , especialmente con comandos personalizados. Pruebe FolderMonitor en su lugar (y úselo"{0}{1}" en el campo de parámetro, incluidas las comillas). Único problema: no puede definir un comando separado para cada carpeta. Solo uno, globalmente.
fregante
@ bfred.it Belvedere tiene sus problemas, pero funcionó para mí. FolderMonitor parece una buena solución también. Creo que es el que el usuario hace la pregunta terminó con .
dangowans
13

He tenido buen éxito con un viejo programa llamado Log Monitor. Es antiguo, y hace mucho tiempo abandonado. Pero sirve el propósito bastante bien.

http://www.freeware-guide.com/download/index2.html

Mover
fuente
1
Ah gracias. Actualmente estoy probando otra utilidad , ¡pero +1!
Camilo Martin
¡Esta increíble "cosa" funciona perfectamente en Windows 10!
mboullouz
7

He creado una utilidad simple para este propósito: https://github.com/benblamey/when_changed

uso: when_changed (ruta del archivo) (comando) (parámetros opcionales)

por ejemplo, cuando se cambió C: \ somedir \ foo.txt myapp.exe barra wibble 123

Ben
fuente
Me gusta cómo es una API elegante. ¿Admite carpetas de forma recursiva?
Camilo Martin
Sí: when_changed C: \ **. Txt foo.exe Quería una versión sin dep de github.com/joh/when-changed para windows.
Ben
6

Con las carpetas de vigilancia .NET, esto es realmente fácil de codificar. Estoy seguro de que alguien ha hecho tal programa.

Acabo de encontrar esta joya para usted http://www.guidingtech.com/9861/automate-folder-actions-windows-watch-4-folder/

bokan
fuente
Soy consciente de lo fácil que es codificar esto en .NET. Simplemente no quería hacerlo. Pero estoy probando este que es gratis, ¡puede que también funcione! +1 para la recomendación, esa parece buena también.
Camilo Martin
4

Actualmente estoy probando esta aplicación , que requiere .NET, pero parece que hace el trabajo.

Camilo Martin
fuente
2

Este es un requisito tan común que me sorprende que no haya una utilidad conveniente integrada en el sistema operativo.

De todos modos, como se mencionó anteriormente, he usado LogMonitor con éxito en el pasado. Sin embargo, encontré esta publicación de blog informativa y estoy usando Watch 4 Folder ahora.

Espero que esto te ayude.

Vijay
fuente
+1, pero no diría que es un "requisito común" para nadie, excepto para nosotros los desarrolladores ... Y para el caso, hay llamadas del sistema para monitorear el sistema de archivos, así que eso cuenta como "integración del sistema operativo", supongo.
Camilo Martin
1
Bueno, lo estaba viendo desde la perspectiva de negocios y redes compartidas. Siempre quieres saber a quién culpar cuando un archivo se pierde: P. Estoy en el medio de diagnosticar tal situación en este momento: /
Vijay
2

Si desea hacer una solución integrada utilizando JScript o VBScript, lo que desea buscar es la supervisión del sistema de archivos mediante suscripciones de eventos WMI. Básicamente, usted escribe el código para monitorear una carpeta y realizar acciones de preforma cuando se detecta un cambio como:

  • __InstanceCreationEvent
  • __InstanceDeletionEvent
  • __InstanceModificationEvent

... y su secuencia de comandos se ejecuta en un intervalo para observar estos eventos. Hay muchos recursos, pero aquí hay algunos para VBScript y Powershell:

mrTomahawk
fuente
1

NirSoft tiene software para monitorear cambios de archivos en Windows
FolderChangesView

FolderChangesView es una herramienta simple que monitorea la carpeta o unidad de disco que elija y enumera cada nombre de archivo que se modifica, crea o elimina mientras se supervisa la carpeta. Puede usar FolderChangesView con cualquier unidad de disco local o con un recurso compartido de red remoto, siempre que tenga permiso de lectura para la carpeta seleccionada.

ingrese la descripción de la imagen aquí

puedes descargarlo gratis desde aquí
Más información

AminM
fuente
Parece más una herramienta de información / depuración que una de automatización, pero sigue siendo interesante.
Camilo Martin
0

Puede usar http://jnotify.sourceforge.net/ que se suscribe a eventos de monitoreo del sistema de archivos específicos del sistema operativo. El código tiene años pero aún funciona (al menos en Windows Server 2013r2 lo estaba probando ayer).

También hay github resurrection of jnotify project en https://github.com/redbooth/jnotify que no ofrece una aplicación de demostración independiente pero (de acuerdo con los registros de confirmación) parchea algunos errores.

En java7 debería haber algún tipo de sistema de archivos similar a inotify, pero aún no lo estaba probando.

andrej
fuente