Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: MK-Ultra en 22 Enero 2008, 15:00 pm



Título: Comando AT (Batch)
Publicado por: MK-Ultra en 22 Enero 2008, 15:00 pm
Buenas, queria saber si alguien me pudiese explicar como se usa el comando AT para si quiero hacer algo cada X tiempo ( solo minutos, sin necesidad de usar dias ) xq la verdad de la ayuda de batch no entendi nada  ;D

Muchas gracias ;)


Título: Re: Comando AT (Batch)
Publicado por: zhynar_X en 22 Enero 2008, 15:09 pm
Creo que era:

Código:
AT [hora] [comando a ejecutar]

Pero debes tener privilegios de admin.
Saludos.


Título: Re: Comando AT (Batch)
Publicado por: 43H4FH44H45H4CH49H56H45H en 22 Enero 2008, 15:16 pm
Buenas, queria saber si alguien me pudiese explicar como se usa el comando AT para si quiero hacer algo cada X tiempo ( solo minutos, sin necesidad de usar dias ) xq la verdad de la ayuda de batch no entendi nada  ;D

Muchas gracias ;)

Si necesitas en minutos llenarias para solo un dia el programador de tareas, a  mi parecer seria mejor utilizar goto en un bucle y definir el tiempo de espera con Ping para volver a realizar el bucle .


Título: Re: Comando AT (Batch)
Publicado por: nhaalclkiemr en 22 Enero 2008, 15:35 pm
mirate el comando schtasks.exe (no lo hay en Win XP Home Edition...)

Para la sintaxis usa la ayuda de Windows o escribe en la consola schtasks.exe /? o mejor ya directamente schtasks.exe /create /?

Saludos ;)


Título: Re: Comando AT (Batch)
Publicado por: MK-Ultra en 22 Enero 2008, 16:59 pm
y como seria la sintaxys si yo quisiera que con el schtasks.exe  se ejecutase X commando cada X tiempo pero solo 1 vez, me  explico?


Título: Re: Comando AT (Batch)
Publicado por: SoloAki en 22 Enero 2008, 17:05 pm
Schtasks mm pero osea lo que hace es programar algo en las tareas programadas. El at nunca lo entendi bien pero de lo que estoy seguro es que, cuando lo hagas lo va a ejecutar el dia siguiente. Ademas si no tienes privilegios vas a tener que aprender de algun post sobre escala de privilegios. Lo mejor si el otro no es Admin es jugar con el registro pero antes desactivando un servicio que no me acuerdo cual era. Sino como dice un usuario de aca arriba bucle lo que mejor podes hacer.


Título: Re: Comando AT (Batch)
Publicado por: nhaalclkiemr en 22 Enero 2008, 17:32 pm
puff estais confundiendo cosas...empecemos:

Primero diferenciar AT.EXE de SCHTASKS.EXE...

AT.EXE es derivado de SCHTASKS.EXE...utiliza la cuenta de servicios AT (por defecto configurada para que se ejecute con privilegios SYSTEM) para crear una tarea programada...su sintaxis es reducida:

Código:
at.exe /?

El comando AT programa la ejecución de comandos y programas en un equipo a
una hora y fecha especificadas. El servicio de programación debe estar en
ejecución para utilizar el comando AT.

AT [\\equipo] [ [id] [/DELETE] | /DELETE [/YES]]
AT [\\equipo] hora [/INTERACTIVE]
    [ /EVERY:fecha[,...] | /NEXT:fecha[,...]] "comando"

\\equipo         Especifica un equipo remoto. Si se omite este
                   parámetro, los comandos se programan en el equipo
                   local.
id                 Es un número de identificación asignado al comando
                   programado.
/delete            Cancela un comando programado. Si se omite id, se
                   cancelarán todos los comandos programados en el equipo.
/yes               Se usa con el comando de cancelación de todos los
                   trabajos cuando no se desea ninguna confirmación.
/interactive       Permite a la tarea interactuar con el escritorio del
                   usuario cuya sesión coincide con el momento de
                   ejecución de la tarea.
/every:fecha[,...] Ejecuta el comando cada día de la semana o mes
                   especificado. Si se omite la fecha, se asume que es el
                   día actual del mes.

/next:fecha[,...]  Ejecuta el comando especificado la próxima vez que
                   aparezca ese día (por ejemplo, el próximo jueves). Si
                   se omite la fecha, se asume que es el día actual del
                   mes.
"comando"          Es el comando de Windows NT o programa por lotes que se
                   va a ejecutar.


El comando SCHTASKS.EXE es más amplio...para crear una nueva tarea necesitas ejecutar schtasks.exe /create XXX :

Código:
schtasks.exe /create /?

SCHTASKS /Create [/S sistema [/U usuario [/P contraseña]]]
    [/RU nombre_usuario [/RP contraseña]] /SC programa [/MO modificador] [/D día
]
    [/I tiempo_inactividad] /TN nombre_tarea /TR ejecutar_tarea [/ST hora_inicio
] [/M meses]
    [/SD fecha_inicio] [/ED fecha_fin].

Descripción:
   Habilita a un administrador para que cree tareas programadas
    en un sistema local o remoto.

Lista de parámetros:
    /S           system            Especifica el sistema remoto
                                   al que conectarse. Si se omite el parámetro
                                   del sistema, el predeterminado es el sistema
                                   local.

    /U           username          Especifica el contexto de usuario en
                                   el que el comando debe ejecutarse.

    /P        contraseña           Especifica la contraseña para el
                                   contexto de usuario dado.

    /RU          usuario           Especifica la cuenta de usuario (contexto
                                   de usuario) en la que se ejecuta la tarea.
                                   Para la cuenta del sistema, son valores
                                   válidos "", "NT AUTHORITY\SYSTEM" o
                                   "SYSTEM".

    /RP          contraseña        Especifica la contraseña para el usuario.
                                   Para solicitar la contraseña, el valor
                                   debe ser "*" o ninguno.
                                   La contraseña no tendrá efecto en la
                                   Cuenta del sistema.

    /SC          programación      Especifica la frecuencia del programa.
                                   Tipos de programas válidos: MINUTE, HOURLY,
                                   DAILY, WEEKLY, MONTHLY, ONCE,
                                   ONSTART, ONLOGON, ONIDLE.

    /MO          modificador       Afina el tipo de programación para permitir
                                   un control más preciso de la programación.
                                   Los valores válidos se listan en la sección
                                   "Modificadores", más abajo.

    /D           días              Especifica el día de la semana en el que
                                   se ejecuta la tarea. Valores válidos: MON,
                                   TUE, WED, THU, FRI, SAT, SUN y para
                                   programaciones mensuales 1 - 31 (días del
                                   mes).

    /M           meses             Especifica los meses del año.
                                   El valor predeterminado es siempre el
                                   primer día del mes. Valores válidos: JAN,
                                   FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP,
                                   OCT, NOV, DEC.

    /I           inactividad       Especifica la cantidad de tiempo inactivo
                                   que debe pasar antes de ejecutar una tarea
                                   ONIDLE programada.
                                   Intervalo válido: 1 - 999 minutos.

    /TN          tarea             Especifica un nombre que identifica de
                                   manera exclusiva a esta tarea programada.

    /TR          ejecución         Especifica la ruta y nombre de archivo del
                                   programa que ejecutará esta tarea
                                   programada.
                                   Ejemplo: C:\windows\system32\calc.exe

    /ST          hora_inicio       Especifica la hora para ejecutar la tarea.
                                   el formato de hora es HH:MM:SS (24 horas)
                                   por ejemplo, 14:30:00 es el equivalente
                                   de 2:30 PM.

    /SD          fecha_inicio      Especifica la fecha de la primera ejecución
                                   de la tarea. El formato es
                                   "dd/mm/yyyy".

    /ED          fecha_fin            Especifica la fecha final para
                                   la ejecución de la tarea. El formato es
                                   "dd/mm/yyyy".

    /?                   Muestra esta ayuda/uso.

Modificadores: valores válidos para el modificador /MO por tipo de programación:

    MINUTE:  1 - 1439 minutos.
    HOURLY:  1 - 23 horas.
    DAILY:   1 - 365 días.
    WEEKLY:  semanas 1 - 52.
    ONCE:    sin modificadores.
    ONSTART: sin modificadores.
    ONLOGON: sin modificadores.
    ONIDLE:  sin modificadores.
    MONTHLY: 1 - 12, o
             FIRST, SECOND, THIRD, FOURTH, LAST, LASTDAY.

Ejemplos:
    SCHTASKS /Create /S sistema /U usuario /P contraseña /RU como_usuario
             /RP contraseña_como_usuario /SC HOURLY /TN prueba1 /TR notepad
    SCHTASKS /Create /S sistema /U dominio\usuario /P contraseña /SC MINUTE
             /MO 5 /TN rtest2 /TR calc.exe /ST 12:00:00
             /SD 15/09/2001 /ED 15/09/2001 /RU como_usuario /RP
    SCHTASKS /Create /SC MONTHLY /MO first /D SUN /TN game
             /TR c:\windows\system32\freecell
    SCHTASKS /Create /S sistema /U usuario /P contraseña /RU como_usuario
             /RP contraseña_como_usuario /SC WEEKLY /TN prueba1 /TR notepad.exe
    SCHTASKS /Create /S sistema /U dominio\usuario /P contraseña /SC MINUTE
             /MO 5 /TN test2 /TR c:\windows\system32\notepad.exe
             /ST 18:30:00 /RU como_usuario /RP *
    SCHTASKS /Create /SC MONTHLY /MO first /D SUN /TN celda
             /TR c:\windows\system32\freecell /RU runasuser

Y como veis tu puedes elegir el usuario...asi k aunke no tengas privilegios puedes establecer una tarea programada para tu usuario (siempre y cuando tenga contraseña) y la pongas...si la cuenta no tiene contraseña no podrás hacerlo...AT sin privilegios Admin no te sirve para nada...

Pero weno como supongo que será para ejecutar en otro ordenador lo mejor es usar el usuario SYSTEM...no tendrás que poner ninguna contraseña y tu aplicacion no se verá cuando se ejecute pero tendrás que tener privilegios Admin...

y como seria la sintaxys si yo quisiera que con el schtasks.exe  se ejecutase X commando cada X tiempo pero solo 1 vez, me  explico?

Te estas contradiciendo :xD si quieres "ejecutar algo cada X tiempo" tiene que ser un numero superior de una vez...pork si solo es una vez ya sería "ejecutar algo dentro de X tiempo"...explicate mejor...di mas concretamente que quieres hacer y te pogno como sería...

Saludos ;)


Título: Re: Comando AT (Batch)
Publicado por: MK-Ultra en 22 Enero 2008, 18:54 pm
perdon, era para ejecutar dentro de X tiempo.

xD


Título: Re: Comando AT (Batch)
Publicado por: 43H4FH44H45H4CH49H56H45H en 23 Enero 2008, 06:12 am
Espero que este code te ayude, pero solo sirve para rango de 00 a 59 minutos falta colocar un control para que si el minuto pase de 59 coloque una variable a 0 y sume lo que resta ademas de subir la hora.

Pruebalo colocando en "Cada cuantos minutos deseas que se ejecute? " valores que multiplicados por "Cuantas veces?  " devuelvan un resultado menor a 59 para que veas el funcionamiento.

Código:
@echo off
title PROGRAMANDO TAREAS CON AT BY CODELIVE
color 1F
set/p cmin= Cada cuantos minutos deseas que se ejecute? 
set/p veces= Cuantas veces? 
set/p hora= Hora de Inicio?   
set/p minutos= Minuto de Inicio?   
set/a a=0
:bucle
if %a%==%veces% goto fin
set/a re=%cmin%*a
set/a min=%minutos%+%re%
if %min% GTR 59 msg * Error && goto error
AT %hora%:%min% msg * Reportandome%a%veces
echo AT %hora%:%min% msg * Reportandome%a%veces>>c:\1.txt

Set/a a=a+1
goto bucle
:error
TITLE ERROR
cls
color 0F
echo EL PROGRAMA SOLO ESTA HECHO PARA UNA HORA
echo MEJORA EL PROGRAMA MODIFICANDO EN RANGO DE LA HORA SI SE PASAN
echo LOS MINUTOS DE 59
pause>nul
exit

:fin
echo SE PROGRAMARON LAS TAREAS CON EXITO
start C:\1.TXT
echo PULSA UNA TECLA PARA SALIR
pause>nul
exit


Título: Re: Comando AT (Batch)
Publicado por: MK-Ultra en 23 Enero 2008, 13:37 pm
El programa seria mas o menos como que el usuario ingresa X minutos y apartir de ese tiempo cuando terminen esos X minutos se ejecute un comando.

Me explico?

PD: = estubo bueno el programa anterior pero no era exactamente lo que estaba buscando. Gracias de todos modos ;)


Título: Re: Comando AT (Batch)
Publicado por: nhaalclkiemr en 23 Enero 2008, 13:56 pm
Mira hace un tiempo hice un lanzador de aplicaciones SYSTE;...te servirá para lo que quieres:

Código
  1. @echo off
  2. :: Ejecutar una aplicación como SYSTEM
  3. :: Puedes ejecutarla inmediatamente o programarla para cuando quieras
  4. :: Tal como está el codigo está programado para ejecutar al intantante la aplicación
  5. :: Borra los comentarios REM para ahorrar codigo y fijate en lo que pone
  6. :: By nhaalclkiemr
  7. set a=0
  8. set z=%TIME:~0,2%
  9. if "%TIME:~0,1%"==" " set z=0%TIME:~1,1%
  10. if "%TIME:~8,1%"=="," goto normal
  11. if "%TIME:~10,1%"=="," goto 2caso
  12. if "%TIME:~12,1%"=="," goto 3caso
  13. :normal
  14. set x=%TIME:~3,2%
  15. :2caso
  16. set x=%TIME:~4,2%
  17. :3caso
  18. set x=%TIME:~5,2%
  19. :a
  20. set /A a=%a%+1
  21. if "%x%"=="08" set x=8
  22. if "%x%"=="09" set x=9
  23. if "%a%"=="1" set /A x=%x%+1
  24. REM El segundo 1 especifica el tiempo en minutos que tardará en ejecutarse la aplicación, es modificable
  25. REM Solo se puede sumar como máximo 86400 minutos, de lo contrario pueden producirse errores
  26. :e
  27. if %x% GTR 59 set /A z=%z%+1
  28. if %z% GTR 23 set /A z=%z%-24
  29. for /L %%A in (0,1,9) do if "%z%"=="%%A" set z=0%z%
  30. if %x% GTR 59 set /A x=%x%-60
  31. if %x% GTR 59 goto e
  32. at.exe %z%:%x% AQUITUPROGRAMA.EXE
  33. REM En lugar de lo anterior puedes poner lo siguiente si quieres que la aplicacion sea visible:
  34. REM at.exe %z%:%x% /interactive AQUITUPROGRAMA.EXE
  35. REM %z% y %x% son la hora y los minutos a los que se ejecutará la aplicación, puedes poner otra cosa si quieres
  36. if %a%==11 goto b
  37. if not %errorlevel%==0 goto a
  38. schtasks /run /tn at1
  39. REM Esta ultima linea ejecuta inmediatamente la aplicación, si la estás programando para una hora determinada borra esta linea
  40. :b
  41. set a=0
  42. if %x% LEQ 9 set x=0%x%
  43. :c
  44. set /A a=%a%+1
  45. schtasks /create /tn temp /tr AQUITUPROGRAMA.EXE /sc once /st %z%:%x%:00 /ru System
  46. REM Esto se ejecutará en caso de que el comando AT falle, es un intento alternativo, de esta manera no se puede hacer visible
  47. if %a%==11 goto error
  48. if not %errorlevel%==0 goto c
  49. schtasks /run /tn temp
  50. REM Esta ultima linea ejecuta inmediatamente la aplicación, si la estás programando para una hora determinada borra esta linea
  51. :error
  52. :: Aqui va el BAT que se ejecuta en caso de que se produzca un error

Fijate en los comentarios REM...sobre todo la que pone:

REM El segundo 1 especifica el tiempo en minutos que tardará en ejecutarse la aplicación, es modificable

Ya me dirás...

Saludos ;)


Título: Re: Comando AT (Batch)
Publicado por: MK-Ultra en 23 Enero 2008, 14:44 pm
esta buena pero lo que necesito es una en el que el usuario sea el que le trasmita los datos, osea que tegno una variable modificable por el usuario, digamos que el usuario le dice a la maquina el tiempo de cuenta regresiva.

Muchas gracias = ;)


Título: Re: Comando AT (Batch)
Publicado por: nhaalclkiemr en 23 Enero 2008, 17:01 pm
Pues modifica esta linea:

Código
  1. if "%a%"=="1" set /A x=%x%+1

así:

Código
  1. if "%a%"=="1" set /A x=%x%+%1

y llamas al BATCH con sintaxis:

mibat.bat [minutos]

o si prefieres puedes preguntar:

Código
  1. set /p minut= Escribe el tiempo en minutos a esperar

y la primera linea que puse que había que modificar en vez de ponerla como puse arriba la pones así:

Código
  1. if "%a%"=="1" set /A x=%x%+%minut%

Saludos ;)


Título: Re: Comando AT (Batch)
Publicado por: 43H4FH44H45H4CH49H56H45H en 24 Enero 2008, 03:32 am
El programa seria mas o menos como que el usuario ingresa X minutos y apartir de ese tiempo cuando terminen esos X minutos se ejecute un comando.

Me explico?

PD: = estubo bueno el programa anterior pero no era exactamente lo que estaba buscando. Gracias de todos modos ;)

A bueno en ese caso si solo se ejecutaria una vez y tendria como variable el numero de minutos que el usuario ingresaria para que el programa espere a ejecutar la orden una vez nada mas lo podria hacer asi:
Código:
@echo off
TITLE UTILIZANDO FOR PARA VARIABLES DE TIEMPO Y AT CODELIVE
COLOR 0F
TIME /T >C:\1.TXT
SET VAR=
FOR /F "eol=; tokens=2,2* delims=: " %%i in (C:\1.txt) do set VAR=%%i
SET VAR1=
FOR /F "eol=; tokens=1,2* delims=: " %%i in (C:\1.txt) do set VAR1=%%i
SET VAR2=
FOR /F "eol=; tokens=2,2* delims= " %%i in (C:\1.txt) do set VAR2=%%i
set /p dame= Cuantos minutos pasaran antes de realizar la tarea?
set /a r=%VAR%+%dame%
AT %VAR1%:%r%%VAR2% msg * Reportandome
pause

Aqui faltaria corregir el rango si la suma pasa de 59 lo cual haria que el comando AT marque error, seria bueno utilizar una formula matematica para restar la cantidad sobrante cuando pasa de 59 - extraerla para sumarla a 00 para quedar en el rango de 00-59, tb hay que corregir el uso de "0" antes de la variable "r" si esta es menor a 10 y tb un error si no ingresa algun numero, en si varias cosas solo es un pequeño ejemplo rapido  :P
Creo que if seria de ayuda para la correcion de errores  :o

Editado:
Me olvide que mi formato de hora es 11:00p.m. por eso la variable VAR2 si fuese el formato 23:00 quitariamos esa variable y seria mas sencillo la forma de hacerlo  :P