No Me Funcina Este Codigo
Publicado: 19 Mar 2012, 01:31
Hola ando necesitando un scpit para programar tareas, asique a lo primero que recurri es al foro
Encontre el siguiente post: http://www.emesn.com/autoitforum/viewtopic.php?f=4&t=52 y me encanto,
El problema es que le hize algunas modificaciones y desde la tarde no me funciono mas.
Asique volvi al codigo original pero este tampoco me funciono mas. Reinstale autoit y nada, incluso probe con otra PC.
la verdad creo que es un codigo muy complejo par mi que estoy inicinadome en esto.
si alguin me puede dar una mano estare muy agradecido.
El codigo que modifique y le quite funciones no lo tengo mas, lo borre de gusto pensando que yo lo habia estropeado.
el codigo original es:
Encontre el siguiente post: http://www.emesn.com/autoitforum/viewtopic.php?f=4&t=52 y me encanto,
El problema es que le hize algunas modificaciones y desde la tarde no me funciono mas.
Asique volvi al codigo original pero este tampoco me funciono mas. Reinstale autoit y nada, incluso probe con otra PC.
la verdad creo que es un codigo muy complejo par mi que estoy inicinadome en esto.
si alguin me puede dar una mano estare muy agradecido.
El codigo que modifique y le quite funciones no lo tengo mas, lo borre de gusto pensando que yo lo habia estropeado.
el codigo original es:
Muchas Gracias de antemano#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