Hola, llevaba algun tiempo sin conectarme.
Te pongo los codigos corregidos (creo), no es problema compilarlo
Código: Seleccionar todo
#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_outfile=Cron 64 bits.exe
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_UseX64=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#cs
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Juan Luis Rodríguez González
CRON 0.2.1.11
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
¿Qué es Cron?
-------------
Cron (el nombre es una reliquia UNIX) es un proceso que se inicia cuando
su máquina arranca y nunca se detiene hasta que se apaga. Durante su
existencia, comprueba los contenidos de cierto fichero cada minuto (puede
cambiar fácilmente la granularidad del tiempo, por ejemplo a 5 minutos). Si
encuentra que la hora y fecha actuales coinciden con una entrada en el
fichero, Cron inicia el proceso mencionado en el fichero.
Esto suena aburrido, pero en la práctica, Cron es la herramienta más útil de
planificar tareas repetitivas que he encontrado nunca.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
El fichero CRONTAB.TXT
m h d m s comando [|| parametros]
m = minutos 0 a 59
h = horas 0 a 59
d = dia del mes 1 a 31
m = nº de mes 1 a 12
s = nº semana 1 = Lunes 7y0= Domingo
comando = lo que quieras que se ejecute
parametros
$minuto $hora $dia_mes $mes $dia_semana Comando [|| parametros]
Hay dos comodines:
* significa que se cumple siempre
I que se cumple cuando coincide con la ejecución de CRON
/ indica el incremento (solo se puede usar una vez por linea)
Añadido comandos internos
:kill <proceso> cierra el proceso ej: :kill iexplore.exe cierra el intene explores
:off Apaga el ordenador
:exit cierra cron
:reboot reinicia el ordenador
:beep <frecuencia> <duración en milesimas de segundo> ej: :beep 500 1000
:play <nombre de archivo de sonido> ej: :play c:\windows\media\tada.wav
() titulo () texto ;mensaje emerjente ej: () Alerta () Este es un mensaje de prueva||Esta es otra linea
Añadigo multiples, rango y balor de incremento
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
opciones aun no soportadas
coma para valore multibles ej: 1,2 * * * * comando
y guión para rangos ej: 2-5 * * * * comando
añadir más comandos internos
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#ce
;Opt("RunErrorsFatal", 0)
;--------- Archivo de registro ------------
$fileReg = FileOpen("reg.log", 1)
If $fileReg = -1 Then
MsgBox(0, "Error", "No se puede abrir archivo.")
EndIf
FileWriteLine($fileReg, "")
FileWriteLine($fileReg, "Comienzo de Cron ( " & @HOUR & ":" & @MIN & " " & @MDAY & " de " & @MON & " de " & @YEAR & " )")
FileWriteLine($fileReg, "-------------------------------------------")
FileClose($fileReg)
;----------------------------------------
$segundos = 0
$y = 0
Dim $subcom[6]
$subcom[0] = 0
$subcom[1] = 0
$subcom[2] = 0
$subcom[3] = 0
$subcom[4] = 0
$subcom[5] = 0
;--------- Variables para el comodin (I)------------
$Iminutos = Number(@MIN)
$Ihoras = Number(@HOUR)
$Imes = Number(@MON)
$Idia_mes = Number(@MDAY)
$Idia_semana = Number(@WDAY) - 1
;--------------------------------------------------
;--------- Bucle principal de la aplicación-------------
While 1
Dim $par[6]
$minutos = Number(@MIN)
$par[1] = Number(@MIN)
$horas = Number(@HOUR)
$par[2] = Number(@HOUR)
$mes = Number(@MON)
$par[3] = Number(@MON)
$dia_mes = Number(@MDAY)
$par[4] = Number(@MDAY)
$dia_semana = Number(@WDAY) - 1
$par[5] = Number(@WDAY)
$espera = 60000
abrir() ; abrir y ejecutar fichero CRONTAB.TXT
;------------- reaguste de tiempos ------------
$segundos = (@SEC) * 1000
;If 0 < @SEC Then
; $segundos = (@SEC) * 1000
;EndIf
$espera = $espera - $segundos
;----------------------------------------------
Sleep($espera); pausa 60 segundos 1 minuto
WEnd
;--------- abrir y ejecutar fichero CRONTAB -----------
Func abrir()
$file = FileOpen(".CRONTAB", 0);Lo intenta con la extensión CRONTAB
; Revisa si el archivo está listo para abrir
If $file = -1 Then
$file = FileOpen("CRONTAB", 0);Lo intenta sin la extensión TXT
If $file = -1 Then
$file = FileOpen("CRONTAB.txt", 0);Lo intenta con la extensión TXT
If $file = -1 Then
MsgBox(0, "Error", "Archivo CRONTAB no se pudo abrir.")
Exit; Sale de la aplicación
EndIf
EndIf
EndIf
; Lee líneas de texto hasta que aparece EOF (End Of File= Fin de Archivo)
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
$primero = StringMid($line, 1, 1);saca el primer caracter para comprobar comentarios
;compara el primer carancter si es un numero o comodin pasa a FunRum
If StringIsDigit($primero) Or StringInStr($primero, "*") Or StringInStr($primero, "I") Or StringInStr($primero, "i") = 1 Then
FunRum($line)
EndIf
WEnd
$subcom[0] = 0
FileClose($file)
EndFunc ;==>abrir
Func FunRum($line)
$line = StringStripWS($line, 4);Reduce espacios
;divide linea $parametros[1]=$minuto $parametros[2]=$hora $parametros[3]=$dia_mes $parametros[4]=$mes $parametros[5]=$dia_semana $parametros[6..]=comando
$parametros = StringSplit($line, " ")
;---------- Proceso del comodin (I) -----------------
If $parametros[1] = "I" Or $parametros[1] = "i" Then
$parametros[1] = $Iminutos
EndIf
If $parametros[2] = "I" Or $parametros[2] = "i" Then
$parametros[2] = $Ihoras
EndIf
If $parametros[3] = "I" Or $parametros[3] = "i" Then
$parametros[3] = $Idia_mes
EndIf
If $parametros[4] = "I" Or $parametros[4] = "i" Then
$parametros[4] = $Imes
EndIf
If $parametros[5] = "I" Or $parametros[5] = "i" Then
$parametros[5] = $Idia_semana
EndIf
If Number($parametros[5]) = 0 And StringMid($parametros[5], 1, 1) <> "*" Then
$parametros[5] = 7
EndIf
If $dia_semana = 0 Then
$dia_semana = 7
EndIf
If $par[5] = 0 Then
$par[5] = 7
EndIf
;---------------------------------------------------
Dim $multiples[6]
Dim $rango[6]
$subcom[0] = 0
$subcom[1] = 0
$subcom[2] = 0
$subcom[3] = 0
$subcom[4] = 0
$subcom[5] = 0
For $p = 1 To 5
If StringInStr($parametros[$p], ",") Then
;multiples
$mul = StringSplit($parametros[$p], ",")
For $p2 = 1 To $mul[0]
;
If Number($mul[$p2]) = $par[$p] Then
$multiples[$p] = 1
EndIf
Next
Else
If StringInStr($parametros[$p], "-") Then
;rango
$ran = StringSplit($parametros[$p], "-")
If Number($ran[1]) >= $par[$p] And Number($ran[2]) <= $par[$p] Then
$rango[$p] = 1
EndIf
EndIf
EndIf
;---------------------- Incremento -----------------------
If StringInStr($parametros[$p], "/") > 0 Then ;1
$ss = StringSplit($parametros[$p], "/")
If $minutos = 0 Then
$minutos = 60
EndIf
If $par[1] = 0 Then
$par[1] = 60
EndIf
If Number($horas) = 0 Then
$horas = 24
EndIf
If $par[2] = 0 Then
$par[1] = 24
EndIf
If Mod($par[$p], Number($ss[2])) = 0 Then
$subcom[$p] = 0
Else
$subcom[$p] = 1
EndIf
If $minutos = 60 Then
$minutos = 0
EndIf
If $par[1] = 60 Then
$par[1] = 0
EndIf
If $horas = 24 Then
$horas = 0
EndIf
If $par[2] = 24 Then
$par[2] = 0
EndIf
Else
$subcom[$p] = 0
EndIf
;----------------------------------------------------------
;---------------------------------------------------------
Next
;---------- Comprobaciones -------------------------
If (Number($parametros[1]) = $minutos Or StringMid($parametros[1], 1, 1) = "*" Or $multiples[1] Or $rango[1]) And $subcom[1] = 0 Then
If (Number($parametros[2]) = $horas Or StringMid($parametros[2], 1, 1) = "*" Or $multiples[2] Or $rango[2]) And $subcom[2] = 0 Then
If (Number($parametros[3]) = $dia_mes Or StringMid($parametros[3], 1, 1) = "*" Or $multiples[3] Or $rango[3]) And $subcom[3] = 0 Then
If (Number($parametros[4]) = $mes Or StringMid($parametros[4], 1, 1) = "*" Or $multiples[4] Or $rango[4]) And $subcom[4] = 0 Then
If (Number($parametros[5]) = $dia_semana Or StringMid($parametros[5], 1, 1) = "*" Or $multiples[5] Or $rango[5]) And $subcom[5] = 0 Then
;ejecuta la expresión
correcto($parametros)
EndIf
EndIf
EndIf
EndIf
EndIf
$multiples = 0
$rango = 0
EndFunc ;==>FunRum
;----------------- todo correcto -----------------
Func correcto($parametros)
;------------------------------------------------
;- :kill <aplicación>
;- :off Apaga el ordenador
;- :exit cierra cron
;- :reboot reinicia el ordenador
;- ()titulo()texto ;mensaje emerjente
;------------------------------------------------
$parametros[6] = StringUpper($parametros[6])
Select
Case $parametros[6] = "()"
comando_interno($parametros)
Case $parametros[6] = ":kill"
$comando = $parametros[7]
$x = 8
While $x < UBound($parametros)
$comando = $comando & " " & $parametros[$x]
$x = $x + 1
WEnd
$fileReg = FileOpen("reg.log", 1)
If $fileReg = -1 Then
MsgBox(0, "Error", "No se puede abrir archivo.")
EndIf
FileWriteLine($fileReg, @HOUR & ":" & @MIN & " " & @MDAY & " de " & @MON & " de " & @YEAR & " | kill | " & $comando)
FileClose($fileReg)
While ProcessExists($comando)
;
ProcessClose($comando);------------------ cierra $comando
WEnd
Case $parametros[6] = ":off"
$fileReg = FileOpen("reg.log", 1)
If $fileReg = -1 Then
MsgBox(0, "Error", "No se puede abrir archivo.")
EndIf
FileWriteLine($fileReg, @HOUR & ":" & @MIN & " " & @MDAY & " de " & @MON & " de " & @YEAR & " | off")
FileClose($fileReg)
Shutdown(13);---------------- cierra y apaga
Case $parametros[6] = ":reboot"
$fileReg = FileOpen("reg.log", 1)
If $fileReg = -1 Then
MsgBox(0, "Error", "No se puede abrir archivo.")
EndIf
FileWriteLine($fileReg, @HOUR & ":" & @MIN & " " & @MDAY & " de " & @MON & " de " & @YEAR & " | reboot")
FileClose($fileReg)
Shutdown(6);------------------ reinicia
Case $parametros[6] = ":exit"
$fileReg = FileOpen("reg.log", 1)
If $fileReg = -1 Then
MsgBox(0, "Error", "No se puede abrir archivo.")
EndIf
FileWriteLine($fileReg, @HOUR & ":" & @MIN & " " & @MDAY & " de " & @MON & " de " & @YEAR & " | Exit")
FileClose($fileReg)
While ProcessExists(@ScriptName)
;--------------------------- Cierra procesos CRON
ProcessClose(@ScriptName)
WEnd
Case $parametros[6] = ":beep"
$fileReg = FileOpen("reg.log", 1)
If $fileReg = -1 Then
MsgBox(0, "Error", "No se puede abrir archivo.")
EndIf
FileWriteLine($fileReg, @HOUR & ":" & @MIN & " " & @MDAY & " de " & @MON & " de " & @YEAR & " | beep " & $parametros[7] & " " & $parametros[8])
FileClose($fileReg)
Beep($parametros[7], $parametros[8])
Case $parametros[6] = ":play"
$comando = $parametros[7]
$x = 8
While $x < UBound($parametros)
$comando = $comando & " " & $parametros[$x]
$x = $x + 1
WEnd
$fileReg = FileOpen("reg.log", 1)
If $fileReg = -1 Then
MsgBox(0, "Error", "No se puede abrir archivo.")
EndIf
FileWriteLine($fileReg, @HOUR & ":" & @MIN & " " & @MDAY & " de " & @MON & " de " & @YEAR & " | play | " & $comando)
FileClose($fileReg)
SoundPlay($comando)
Case Else
;
Local $comando[2]
$comando = unir_comando($parametros)
$fileReg = FileOpen("reg.log", 1)
If $fileReg = -1 Then
MsgBox(0, "Error", "No se puede abrir archivo.")
EndIf
FileWriteLine($fileReg, @HOUR & ":" & @MIN & " " & @MDAY & " de " & @MON & " de " & @YEAR & " | " & $comando[0] & " " & $comando[1])
FileClose($fileReg)
ShellExecute($comando[0], $comando[1]);---------- ejecuta parametros
EndSelect
EndFunc ;==>correcto
;------------- Une el resto de parametros de comando --------------
Func unir_comando($parametros)
;
Local $comando[2]
$comando[1] = " "
$xy = 0
$comando[$xy] = $parametros[6]
$x = 7
While $x < UBound($parametros)
If $parametros[$x] = "||" Then
$xy = 1
Else
$comando[$xy] = $comando[$xy] & " " & $parametros[$x]
EndIf
$x = $x + 1
WEnd
Return $comando
EndFunc ;==>unir_comando
Func comando_interno($parametros)
;
$titulo = $parametros[7]
$comodin = "no"
$x = 8
While $x < UBound($parametros)
If $comodin = "si" Then
$comando = $comando & " " & $parametros[$x]
Else
If $parametros[$x] <> "()" Then
$titulo = $titulo & " " & $parametros[$x]
EndIf
EndIf
If $parametros[$x] = "()" Then
$x = $x + 1
$comando = $parametros[$x]
$comodin = "si"
EndIf
$x = $x + 1
WEnd
$fileReg = FileOpen("reg.log", 1)
If $fileReg = -1 Then
MsgBox(0, "Error", "No se puede abrir archivo.")
EndIf
FileWriteLine($fileReg, @HOUR & ":" & @MIN & " " & @MDAY & " de " & @MON & " de " & @YEAR & " | " & $titulo & " |" & $comando)
FileClose($fileReg)
$comando = StringReplace($comando, "||", @CRLF)
MsgBox(0, $titulo, $comando, 15)
EndFunc ;==>comando_interno
y el fichero crontab que tiene ejemplos
Código: Seleccionar todo
########################~ CRON 0,2,1,9 ~#################################################
#
# ------------- minutos (0 - 59)
# | ----------- horas (0 - 23)
# | | --------- dia del mes (1 - 31)
# | | | ------- mes (1 - 12)
# | | | | ----- dia de la semana (0 - 7) (domingo=0, lunes=1, ... sabado=6,domingo=7)
# | | | | |
# * * * * * comando a ejecutar
#
#
# i significa todos los valores validos si cinciden con la ejecución del CROM
# * significa todos los valores validos
# / permite definir una repeticion
# - permite definir un rango
# , permite definir varios valores
#
# Comandos internos
# ~~~~~~~~~~~~~~~~~~~~
# :kill <proceso> cierra el proceso ej: :kill iexplore.exe cierra el intene explores
# :off Apaga el ordenador
# :exit cierra cron
# :reboot reinicia el ordenador
# :beep <frecuencia> <duración> ej: :beep 500 1000
# :play <nombre> ej: :play c:\windows\media\tada.wav
# () <titulo> () <texto> mensaje emerjente ej: () Alerta () Este es un mensaje de prueva||Esta es otra linea
#
# Como se puede obserbar hay algunas mejoras sobre el programa de crom orijinal
#
########################################################################################
# Esto es un comentario
# hora minutos diasdelmes mes de
#
# Se ejecuta cada minuto
#* * * * * Comando
# se ejecuta cada minuto a las 6 de la tarde
#* 18 * * * comando
# Se ejecuta Los Lunes cada minuto
#* * * * 1 comando
# Mensaje emerjete
#* * * * * () Titulo () Mensaje||Otra linea
#abre el fichero reg.log al iniciar el cron
i i i i i reg.log
#abre el fichero reg.log al iniciar el cron solo si el dia es laborable
i i i i 1-5 reg.log
#Cierra el bloc de notas a la hora de ejecutar el cron
#i * * * * :kill notepad.exe
#Apaga el equipo los lunes, martes, miercoles jueves y viernes a la 20:00 horas
# los sabados y domingos a las 22:30
#0 20 * * 1 :off
#0 20 * * 2 :off
#0 20 * * 3 :off
#0 20 * * 4 :off
#0 20 * * 5 :off
#30 22 * * 6 :off
#30 22 * * 0 :off
#esto hace lo mismo que lo anterior
#0 20 * * 1-5 :off
#30 22 * * 6,7 :off
#Ejecuta CCleaner con el parametro /auto los domingos a las 12:00 de la noche(00:00)
# ten encuenta que son necesarios los espacios en "||" para indicar los parametros
#0 0 * * 7 "C:\Archivos de programa\CCleaner\ccleaner.exe" || /auto
#apaga a las 10:25
#25 22 * * * :off
59 5 * * * () salir () Apagar el ordenador||dentro de 1 minuto a las 6:00
0 6 * * * :off ;Apagar el ordenador a las 6:00
#sonido a 500 hz durante 1 segundo
* * * * * :beep 500 1000
#suena el fichero c:\windows\media\tada.wav cada 15 minutos osea alas 0 15 30 45
#*/15 * * * * :play c:\windows\media\tada.wav
Yo cuando lo usaba habia creado un acceso directo en menu de inicio, su consumo de recursos es muy acotado