Thanks Guti e Chi.
Thanks to you I have developed a new method of reporting that gives me the possibility to send EMAIL and SMS simultaneously and very quickly. Attached the code. !
@ECHO OFF
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Programa: Enviador de SMS e EMAIL
:: Autor: Daniel Becker Bighelini
:: Criado em: 25/04/2015
:: Modificado por: Daniel Becker Bighelini
:: Modificado em: 28/04/2015
:: Descricao: Envia SMS e EMAIL.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Habilita a expansao das variaveis de ambiente
SETLOCAL ENABLEDELAYEDEXPANSION
:: Salva pasta atual
PUSHD "%~dp0"
:: Verifica os parametros
SET batargc=0
FOR %%? IN (%*) DO (
IF DEFINED batdebug ECHO %DATE% %TIME% DEBUG #ARG !batargc!: %%?
SET /A batargc+=1
FOR %%f IN (debug help log confirm email sms) DO (
IF [%%f]==[%%?] (
SET batparameters=!batparameters!%%?;
SET bat%%?=1
)
)
)
IF DEFINED batdebug ECHO %DATE% %TIME% DEBUG Quant. de parametros informados: %batargc%
ECHO.
:inicio
:: Define variaveis globais
IF DEFINED batdebug ECHO %DATE% %TIME% DEBUG Declarando variaveis...
CALL:atualiza_data_hora
SET batauthor=Daniel Becker Bighelini
SET batfunction=Enviador
SET batversion=1.0
SET batdescription=Envia SMS e EMAIL para destinatarios da USD
SET batstart=%DATE% %TIME%
SET batuser=%USERNAME%
SET batname=%~n0
SET batext=%~x0
SET batfile=%batname%%batext%
SET batpath=%~dp0
SET battemp="%TEMP%\%batname%%agoraf%.tmp"
SET batpathfull="%batpath%%batname%%batext%"
SET batcfgpathfull="%batpath%%batname%.cfg"
SET batlogname=%batname%.log
SET batlognameold=%batlogname%.old
:: Define variaveis personalizaveis
SET batemailexec=pdm_mail -H ISO-8859-1
SET batsmsexec=sms
:: Fim das variaveis personalizaveis
IF DEFINED NX_ROOT (
IF DEFINED batdebug ECHO %DATE% %TIME% DEBUG Definindo local para armazenamento de logs na USD...
SET batlogpath="%NX_ROOT%\log\%batlogname%"
SET batlogpathold="%NX_ROOT%\log\%batlognameold%"
:: Substitui a barra por contrabarra no path do servicedesk
SET batfindbar=/
SET batreplacebar=\
CALL SET batlogpath=%%batlogpath:!batfindbar!=!batreplacebar!%%
CALL SET batlogpathold=%%batlogpathold:!batfindbar!=!batreplacebar!%%
) ELSE (
IF DEFINED batdebug ECHO %DATE% %TIME% DEBUG Definindo local para armazenamento de logs na pasta do script...
SET batlogpath="%batpath%%batlogname%"
SET batlogpathold="%batpath%%batlognameold%"
)
IF DEFINED batdebug CALL:logmsg DEBUG "Arquivo de logs utilizado: %batlogpath%"
IF DEFINED NX_LOGFILE_LIMIT (
SET batlogsizemax=%NX_LOGFILE_LIMIT%
) ELSE (
SET batlogsizemax=5000000
)
IF DEFINED batdebug CALL:logmsg DEBUG "Tamanho maximo do log: %batlogsizemax% bytes."
IF EXIST %batlogpath% CALL:verifica_log
FOR %%? IN (%batpathfull%) DO SET batdate=%%~t?
CALL:exibe_cabecalho
CALL:bloco_inicio
:: Aborta script se nao forem informados parametros
IF [%argc%]==[0] GOTO erro1
:: Exibe a ajuda
IF DEFINED bathelp GOTO exibe_ajuda
:: Exibe a confirmacao de execucao do programa
IF DEFINED batconfirm (
ECHO.
CHOICE /C SN /M "Deseja continuar com a execucao"
IF ERRORLEVEL 2 GOTO cancelar
)
IF DEFINED batdebug (
:: Capturando variaveis de ambiente do SCRIPT
IF DEFINED batname (
CALL:logmsg DEBUG "Capturando variaveis utilizadas pelo SCRIPT..."
FOR /F "tokens=1-2 delims==" %%a IN ('SET bat') DO (
ECHO %DATE% %TIME% DEBUG %%a=%%b>>%batlogpath%
)
) ELSE (
CALL:logmsg ERROR "AVISO: As variaveis de ambiente do script nao puderam ser coletadas."
)
:: Capturando variaveis de ambiente NTF utilizadas para o envio
IF DEFINED NX_NTF_CONTACT (
CALL:logmsg DEBUG "Capturando variaveis NTF da USD utilizadas para o processo de notificacao..."
:: Somente captura as variaveis NTF se ao menos a obrigatoria NX_NTF_CONTACT existir
:: E isso soh ocorre quando este script eh executado a partir de um metodo de notificacao da USD
FOR /F "tokens=1-2 delims==" %%a IN ('SET NX_NTF') DO (
ECHO %DATE% %TIME% DEBUG %%a=%%b>>%batlogpath%
)
) ELSE (
CALL:logmsg WARNING "AVISO: As variaveis de ambiente NTF da USD nao puderam ser coletadas."
)
)
:: Envia o EMAIL
IF DEFINED batemail (
IF NOT DEFINED NX_NTF_EMAIL_ADDRESS GOTO erro2
IF DEFINED batdebug CALL:logmsg DEBUG "Enviando EMAIL atraves do comando '%batemailexec%'..."
CALL:logmsg SIGNIFICANT "Notificando por EMAIL o contato '%NX_NTF_COMBO_NAME%' ('%NX_NTF_EMAIL_ADDRESS%')..."
%batemailexec%
IF NOT "%ERRORLEVEL%"=="0" (
CALL:erro "%batemailexec%"
) ELSE (
CALL:logmsg SIGNIFICANT "EMAIL enviado com SUCESSO para o contato '%NX_NTF_COMBO_NAME%' ('%NX_NTF_EMAIL_ADDRESS%')."
)
)
:: Envia o SMS
IF DEFINED batsms (
IF NOT DEFINED NX_NTF_VOICE_PHONE GOTO erro3
IF DEFINED batdebug CALL:logmsg DEBUG "Enviando SMS atraves do comando '%batsmsexec%'..."
CALL:logmsg SIGNIFICANT "Notificando por SMS o contato '%NX_NTF_COMBO_NAME%' ('%NX_NTF_VOICE_PHONE%')..."
%batsmsexec% %NX_NTF_VOICE_PHONE% "%NX_NTF_MESSAGE%"
IF NOT "%ERRORLEVEL%"=="0" (
CALL:erro "%batsmsexec%"
) ELSE (
CALL:logmsg SIGNIFICANT "SMS enviado com SUCESSO para o contato '%NX_NTF_COMBO_NAME%' ('%NX_NTF_VOICE_PHONE%')."
)
)
:: Encerra execucao
GOTO fim
:logmsg
SET batmsgtype=%1
SET batmsgtype=%batmsgtype:"=%
SET batmsgtext=%2
SET batmsgtext=%batmsgtext:"=%
SET batmsg=%DATE% %TIME% %batmsgtype% %batmsgtext%
IF "%batmsgtype%"=="SIGNIFICANT" SET batmsg=%DATE% %TIME% %batmsgtype% %batmsgtext%
ECHO %batmsg%
IF DEFINED batlog ECHO %batmsg%>>%batlogpath%
GOTO:EOF
:erro
SET baterror_code=%ERRORLEVEL%
SET baterror_msg=%1
SET baterror_msg=%baterror_msg:"=%
CALL:logmsg ERROR "ERRO [%baterror_code%] ao executar rotina '%baterror_msg%'."
EXIT /B %baterror_code%
GOTO:EOF
:erro1
SET baterror_code=1
CALL:logmsg ERROR "ERRO [%baterror_code%] ao iniciar rotina: Nenhum parametro foi informado."
CALL:bloco_fim
EXIT /B %baterror_code%
GOTO:EOF
:erro2
SET baterror_code=2
CALL:logmsg ERROR "ERRO [%baterror_code%] ao enviar EMAIL: Nenhum endereco de email foi informado."
CALL:bloco_fim
EXIT /B %baterror_code%
GOTO:EOF
:erro3
SET baterror_code=3
CALL:logmsg ERROR "ERRO [%baterror_code%] ao enviar SMS: Nenhum numero de telefone foi informado."
CALL:bloco_fim
EXIT /B %baterror_code%
GOTO:EOF
:sucesso
CALL:logmsg SIGNIFICANT "Operacao CONCLUIDA com sucesso."
GOTO fim
:cancelar
CALL:logmsg SIGNIFICANT "Operacao CANCELADA pelo usuario."
GOTO fim
:atualiza_data_hora
:: Consultando data atual
FOR %%A IN (%DATE%) DO (
FOR /F "tokens=1-3 delims=/-" %%B in ("%%~A") DO (
SET batdataf=%%D%%C%%B
SET batdatas=%%B/%%C/%%D
)
)
:: Consultando hora atual
FOR /F "tokens=1-3 delims=:.," %%A IN ("%TIME%") DO (
SET bathoraf=%%A%%B%%C
SET bathoras=%%A:%%B:%%C
)
:: Concatenando data e hora
SET batagoraf=%batdataf%%bathoraf%
SET batagoras=%batdatas% %bathoras%
GOTO:EOF
:verifica_log
:: Verifica se o arquivo de log atingiu o limite de tamanho definido
:: E em caso positivo, rotaciona o log.
IF DEFINED batdebug CALL:logmsg DEBUG "Verificando tamanho do arquivo de log..."
FOR /F "usebackq" %%A IN ('%batlogpath%') DO set batlogsize=%%~zA
IF DEFINED batdebug CALL:logmsg DEBUG "Tamanho atual do arquivo de log: %batlogsize%"
IF %batlogsize% GEQ %batlogsizemax% (
IF DEFINED batdebug CALL:logmsg DEBUG "O arquivo de log ATINGIU o limite de tamanho de %batlogsizemax% bytes."
IF DEFINED batdebug CALL:logmsg DEBUG "Removendo logs antigos e rotacionando log..."
IF EXIST "%batlognameold%" DEL "%batlognameold%"
IF EXIST "%batlogname%" IF NOT EXIST "%batlognameold%" REN "%batlogname%" "%batlognameold%"
)
GOTO:EOF
:exibe_ajuda
:: Exibe a ajuda do programa
ECHO.
ECHO AJUDA DO SCRIPT
ECHO.
ECHO Sintaxe: %batfile% email^|sms [debug] [log] [help] [confirm]
ECHO.
ECHO email = Envia um EMAIL ao contato.
ECHO sms = Envia um SMS ao contato.
ECHO debug = Exibe detalhadamente o funcionamento do script.
ECHO log = Registra em log o funcionamento do script.
ECHO help = Ajuda do script.
ECHO confirm = Solicita confirmacao antes de executar o script.
ECHO.
ECHO Comandos atualmente configurados:
ECHO email = %batemailexec%
ECHO sms = %batsmsexec%
ECHO.
GOTO fim
:exibe_cabecalho
:: Exibe o cabecalho do programa
ECHO *************************************************************
ECHO %batfunction% %batversion% [%batfile%]
ECHO Desenvolvido por %batauthor% em %batdate%
ECHO Descricao: %batdescription%
ECHO *************************************************************
GOTO:EOF
:bloco_inicio
:: Exibe o bloco de inicio do programa
CALL:logmsg SIGNIFICANT "INICIO"
IF DEFINED batparameters (
IF DEFINED batdebug (
CALL:logmsg DEBUG "Linha de comando utilizada: %CMDCMDLINE%"
CALL:logmsg DEBUG "Parametros validos: %batparameters%"
)
)
GOTO:EOF
:bloco_fim
:: Exibe o bloco de fim do programa
CALL:logmsg SIGNIFICANT "FIM"
GOTO:EOF
:fim
:: Reseta variaveis
CALL:bloco_fim
POPD
ENDLOCAL
:EOF