lunes, 17 de marzo de 2014

Scripts de filtro - No demasiado documentados

Q&A

WatchDirectory v4.7 y versiones superiores soportan Scripts de filtro: ejecutar un pequeño archivo batch (Script) para decidir si un archivo detectado debe ser procesado por una tarea. Se trata de una nueva opción en la configuración de los Eventos de filtro de la tarea.
Antes que esta nueva función estuviera disponible solo se podían crear filtros basados en todo o parte del nombre del archivo o carpeta donde el archivo era detectado. Por ejemplo "ejecutar la tarea solamente para archivos que coincidan con *.txt". La nueva opción del Script de filtro permite mucha más flexibilidad, al recibir el Script toda la información del archivo detectado a través de las Variables de entorno y se puede, por ejemplo, comprobar el contenido del archivo detectado para decidir si la tarea debe seguir procesando el archivo.
Se pueden encontrar múltiples Scripts de ejemplo en la carpeta <Install Directory>\ExampleFilterScripts (generalmente en C:\Archivos de programa (x86)\watchDirectory\ExampleFilterScripts).
Ejemplo: Enviar un correo electrónico solo cuando el archivo contenga la palabra "Error"
Un cliente está monitorizando una carpeta donde se crean archivos de registro por parte de un proceso automatizado nocturno. La mayoría de estos registros no contienen ningún dato de interés, pero de vez en cuando uno o dos de ellos contienen información sobre errores de los cuales el cliente quiere ser notificado. Para ello creó una tarea utilizando el Plug-in de correo electrónico y habilitó la opción para añadir como adjunto el archivo del registro. A continuación el Script de filtro que utilizó.
rem Cuando es llamado desde el WatchDirectory Control Center, siempre procesar el "evento"
IF "%WD_CALLEDFROMSETUP%" EQU "Y" GOTO :SayYes

rem usar FINDSTR para comprobar el contenido del archivo
FINDSTR /I "Error" "%WD_FILE%"
IF %errorlevel% EQU 0 GOTO :SayYes
rem este no es un registro de error, indicar a la tarea que ignore el evento
GOTO :SayNo

:SayYes
ECHO Y > "%WD_FILTERRESULT%"
GOTO :EOF

:SayNo
ECHO N > "%WD_FILTERRESULT%"
GOTO :EOF

Algunas recomendaciones
No realizar ningún proceso pesado dentro de estos Scripts. Si su Scirpt tarda mucho tiempo en terminar, la tarea de WatchDirectory abortará. En tiempo, un par de segundos es correcto, 10 segundos no lo son.
Asegúrese que su Script siempre escriba su resultado (el caracter Y o N) al archivo de resultado (echo Y > "%WD_FILTERRESULT%").