Académique Documents
Professionnel Documents
Culture Documents
http://www.vicente-navarro.com/blog/2007/12/29/sleep-en-scripts-de-wi...
Lo hice y lo entend
El blog de Vicente Navarro
sleep en scripts de Windows. Operaciones aritmticas en CMD. Comandos para scripting del ResKit.
En Ejemplos de scripting en Windows: Aadir la fecha y la hora al nombre de un fichero estuvimos viendo algunas indicaciones para hacer scripts en Windows algo ms sofisticados de lo habitual. Siguiendo un poco con la temtica de hacer scripts o ficheros batch en Windows, hace unos das me encontr con el problema de que en Windows por defecto no hay un comando sleep como en los sistemas UNIX. Googleando, encontr la pgina Batch file SLEEP Command que explica que en las Windows Server 2003 Resource Kit Tools hay un sleep.exe. Sin embargo, es posible que queramos hacer un script portable que podamos ejecutar en cualquier sistema sin necesidad de tener que instalar o copiar nada adicional. Incluso puede haber situaciones en las que simplemente resulte imposible descargar el Resource Kit o copiarlo de otro sistema y realmente necesitemos una especie de sleep en nuestro script. Pues bien, la pgina Implementing the WAIT Command in a Batch File nos hace una sugerencia que me ha gustado mucho basada en el comando ping de Windows, que por defecto (y no se puede cambiar) manda un paquete ICMP por segundo. Con algunas pequeas modificaciones de cosecha propia, el sleep.bat basado en ping quedara as:
@echo off set /a i=%1%+1 ping 127.0.0.1 -n %i% -w 1000 > nul
donde en lugar de 10 pondramos el nmero de segundos que queremos esperar. Como el ping de Windows espera un segundo entre cada dos paquetes mandados, para esperar n segundos, necesitaremos enviar n+1 paquetes. De ah la operacin aritmtica del set /a. Por supuesto, podemos ahorrarnos tener que andar con dos ficheros batch metiendo directamente el ping en el script final. Este mtodo es unos milisegundos impreciso, en funcin de lo que tarde el ping en ejecutarse y lo que tarde la IP interna en contestar, aunque la imprecisin debera ser aceptable para la mayora de los casos. Respecto al set /a que he usado para sumar , se trata de una interesante forma de ejecutar operaciones aritmticas con enteros de 32 bits con signo en el CMD de Windows:
C:\>set /a (2+3)*4 20 C:\>set /a 7/2
1 de 4
http://www.vicente-navarro.com/blog/2007/12/29/sleep-en-scripts-de-wi...
3 C:\>set /a 7%2 1
- expression separator
If you use any of the logical or modulus operators, you will need to enclose the expression string in quotes. Any non-numeric strings in the expression are treated as environment variable names whose values are converted to numbers before using them. If an environment variable name is specified but is not defined in the current environment, then a value of zero is used. This allows you to do arithmetic with environment variable values without having to type all those % signs to get their values. If SET /A is executed from the command line outside of a command script, then it displays the final value of the expression. The assignment operator requires an environment variable name to the left of the assignment operator. Numeric values are decimal numbers, unless prefixed by 0x for hexadecimal numbers, and 0 for octal numbers. So 0x12 is the same as 18 is the same as 022. Please note that the octal notation can be confusing: 08 and 09 are not valid numbers because 8 and 9 are not valid octal digits.
Por otra parte, el sleep.exe no es el nico de los comandos de las Windows Server 2003 Resource Kit Tools que van orientados a la creacin de ficheros batch. Aunque la mayora estn creados para la lnea de comandos y lo normal es que resulten tiles en ficheros batch, hay unos pocos que van en la lnea de emular las capacidades de las utilidades de lnea de comandos de UNIX:
Qgrep.exe: Equivalente al grep de UNIX y ms potente que el find Sleep.exe: Batch File Wait: Equivalente al sleep de UNIX Tail.exe: Equivalente al tail de UNIX Timeit.exe: Equivalente al time integrado en las shell de los UNIX
de Windows
C:\Program Files\Windows Resource Kits\Tools>timeit.exe notepad.exe Version Number: Exit Time: Windows NT 5.1 (Build 2600) 12:15 pm, Saturday, December 29 2007
2 de 4
http://www.vicente-navarro.com/blog/2007/12/29/sleep-en-scripts-de-wi...
Elapsed Time: Process Time: System Calls: Context Switches: Page Faults: Bytes Read: Bytes Written: Bytes Other:
De los otros comandos, normalmente de uso muy especfico para ciertas tareas, me llama la atencin el cdburn para grabar imgenes ISO desde lnea de comandos, como el cdrecord que se suele usar en Linux:
C:\Program Files\Windows Resource Kits\Tools>cdburn Usage: cdburn <drive> -erase [image [options]] cdburn <drive> image [options] Options: -erase Erases the disk before burning (valid for R/W only) -sao Writes the image out in "session at once", or cue sheet, mode (default is "track at once") -speed Speed of burn, or 'max' for maximum speed -imagehaspostgap Use if your image already contains a 150 sector postgap The [image] must be provided unless the -erase flag is set. If both an image and -erase are provided, the media will be erased prior to burning the image to the disc.
En las Windows XP Service Pack 2 Support Tools tambin encontramos el diruse.exe, una especie de du de UNIX:
C:\>diruse c:\windows Size (b) 3044783611 3044783611 Files 14926 14926 Directory SUB-TOTAL: C:\WINDOWS TOTAL: C:\WINDOWS
CPU
CpuTime
97 0 0 0 0 0 0 0 0 0 0 0
4:32:06 0:00:32 0:00:00 0:00:10 0:00:02 0:00:29 0:00:06 0:00:01 0:00:00 0:00:00 0:00:01 0:00:09
0 28 172 1868 16292 1960 5620 6148 2104 3264 3372 14352
0 0 0 7 79 10 11 36 2 5 14 57
0 0 0 0 8 977 6 11 21 92 13 932 146 13 712 45 9 388 90 9 497 76 8 229 39 8 88 71 8 222 76 8 545 184 8 1451
2 82 3 13 31 16 26 6 5 17 13 74
3 de 4
http://www.vicente-navarro.com/blog/2007/12/29/sleep-en-scripts-de-wi...
Ah! Y si necesitamos un uptime, tambin hay uno a nuestra disposicin en una descarga separada (Uptime.exe Tool Allows You to Estimate Server Availability with Windows NT 4.0 SP4 or Higher):
C:\>uptime \\ORDENADOR has been up for: 0 day(s), 2 hour(s), 26 minute(s), 41 second(s)
De todas formas, donde est un buen CygwinF Actualizacin 20/8/09: Tambin podemos hacer fcilmente un sleep con VBScript y Wscript.Sleep. Creamos un fichero llamado sleep.vbs con este contenido:
Wscript.Sleep 5000
y lo ejecutamos as:
cscript sleep.vbs
:wq Entradas relacionadas Ejemplos de scripting en Windows: Aadir la fecha y la hora al nombre de un fichero (3) rsync siempre sincroniza ciertos ficheros. Ver los segundos de la fecha de un fichero. (2) Cambiar la fuente del CMD de Windows (2) Wake on LAN (1) VPN con OpenSSH (1) VFD, la disquetera virtual para Windows (1) Esta entrada fue publicada bajo una licencia CC el 29 diciembre 2007 a las 14:47 y pertenece a la categora Windows. Etiquetas: CMD, ping, shell, sleep, Windows. Puedes seguir las respuestas a travs de RSS. Ya no se pueden dejar comentarios, pero puedes hacer trackback desde tu pgina.
4 de 4