PDA

Ver la versión completa : [Tutoriales][DOS][Scripting] Sleep, la hora de dormir



dardo
12/06/2008, 20:31
Quién esté acostumbrado a practicar programar e introducir una pausa en un script, por ejemplo,para darle tiempo al usuario a que lea un texto,o darle unos segunds para poder abortar o lo que sea habrá encontrado que en DOS no existe ningún comando que haga eso.

Si piensas eso es porque no has visto que ya hay otro que cubre esa necesidad.

Voy a construir un sleep casero.



sleep.bat (recibe como parámetro le tiempo de espera en segundos)

@echo off
set /a i=%1%+1
ping 127.0.0.1 -n %i% -w 1000 >nul
Ahora vamos a "descontruírlo" para que un dummy pueda entenderlo.

Primero apagamos el eco. Así no muestra lo que vamos a hacer, puesto que solo queremos una pausa.
En la segunda linea establecemos una variable a la que llamamos i y que toma su valor del primer parámetro de la linea de comandos cuando llamamos a este script +1.

A continuación nos hacemos un ping a nosotros mismos (127.0.0.1) i veces con una espera de 1000 milisegundos entre una y otra redirigiendo la salida al agujero negro del sistema (nul).

Ahora podemos poner el fichero en cualquier parte de nuestro sistema e incluirlo en el path.

En nuestros scripts podemos llamar a sleep.bat n donde n es el número de segundos que espera.

Espero que os haya gustado. Hasta la próxima entrega.

Karkayu
12/06/2008, 21:23
Me ha parecido interesante (hace mil que no "programaba" [wei] en ficheros .bat)

Gracias por el aporte.

Un saludo
:brindis:

Dullyboy
12/06/2008, 22:04
Soy un ignorante demasiado curioso, ¿por qué el "+1" de "set /a i=%1%+1"?

dardo
14/06/2008, 16:45
Soy un ignorante demasiado curioso, ¿por qué el "+1" de "set /a i=%1%+1"?

Porque el primer ping lo haces en el instante cero.

^MiSaTo^
14/06/2008, 18:01
Y por qué no has metido un pause en el bat? Pregunto porque yo de windows no tengo mucha idea, pero cuando hago algo que necesito que espere, pongo pause en el bat y espera hasta qe yo pulso una tecla.

dardo
14/06/2008, 18:54
Y por qué no has metido un pause en el bat? Pregunto porque yo de windows no tengo mucha idea, pero cuando hago algo que necesito que espere, pongo pause en el bat y espera hasta qe yo pulso una tecla.

Porque lo que quiero es un sleep de n segndos, no un pause. Necesito que no necesite intervención del usuario.

Lo creé para lanzar nueve sesiones de terminal (usando putty). Cuatro a las máquinas desde las que monitorizo todas las demás, y cuatro de monitorización exclusiva.

Y en otro script en el que lanzo diez sesiones (dos a dos máquinas y tres a otras dos para hacer unos reinicos antes de salir y si le tengo que dar al botón pierdo mucho tiempo.

Además cada ventana que se abre le roba el foco a la ventana de la terminal en la que se lanza.

Lo único que quiero es una breve pausa entre que se abre una y otra. Para quién no lo sepa cuando lanzas un putty, incluso pasándole como parámetro en nombre de usuario y contraseña te abre durante un instante la ventana inicial de configuración y la destruye para lanzarte la ventana de terminal, con lo que las sesiones salen en un orden aleatorio que lo convierte en un caos.

Además le puedo dar al botón, darle a bloquear sesión, irme a mear y cuando regrese estará todo abierto.

^MiSaTo^
14/06/2008, 18:56
Porque esto lo cree para lanzar nueve sesiones de terminal (usando putty). Cuatro a las máquinas desde las que monitorizo todas las demás, y cuatro de monitorización exclusiva.

Y en otro script en el que lanzo diez sesiones (dos a dos máquinas y tres a otras dos para hacer unos reinicos antes de salir y si le tengo que dar al botón pierdo mucho tiempo.

Además cada ventana que se abre le roba el foco a la ventana de la terminal en la que se lanza.

Lo unico que quiero es una breve pausa entre que se abre una y otra. Para quie no lo sepa cuando lanzas un putty, incluso pasándole como parámetro en nombre de usuario y contraseña te abre durante un instante la ventana inicial de configuración y la destruye para lanzarte la ventana de terminal, con lo que las sesiones salen en un orden aleatorio que lo convierte en un caos.

Además le puedo dar al botón, darle a bloquear sesión, irme a mear y cuando regrese estará todo abierto.

Ya veo, en ese caso mi pause no te vale de nada ;)
Gracias por la explicación. yo esque windows lo toco solo en el ordena del curro para 4 cosas, nuestros servidores son unix y solaris así que de dos scripting no tengo ni idea xD

dardo
14/06/2008, 19:05
Ya veo, en ese caso mi pause no te vale de nada ;)
Gracias por la explicación. yo esque windows lo toco solo en el ordena del curro para 4 cosas, nuestros servidores son unix y solaris así que de dos scripting no tengo ni idea xD

Ahora me entero que Solaris no es UNIX xD. Yo todos los que toco son AIX, pero los hay de todos los tamaños. Como no nos ponen estaciones de trabajo no-Windows y quiero automatizar tareas que hago todos los días en mi estación de trabajo pues apechugo. Además saber no ocupa lugar.

^MiSaTo^
14/06/2008, 19:20
Ahora me entero que Solaris no es UNIX xD. Yo todos los que toco son AIX, pero los hay de todos los tamaños. Como no nos ponen estaciones de trabajo no-Windows y quiero automatizar tareas que hago todos los días en mi estación de trabajo pues apechugo. Además saber no ocupa lugar.

Ya se que solaris es unix... pero para mi hay diferencia, porque algunos son linux (debian principalmente), otros un unix de oracle, y los solaris. Ah y unos windows server 2003 a los que yo me he negado a meter mano en ellos xD
Yo no curro con los servidores directamente, en mi puesto tengo un win xp para programar. Eso si, si falla alguno de los servidores que no son windows pues normalmente toco yo que tardo menos que si tengo que esperar a que venga el administrador xDD
Además mi jefe me da total libertad para hacer con ellos lo que quiera (que sabe que me mola) siempre que respete las demás aplicaciones que no son nuestras.