Vous êtes sur la page 1sur 4

Lo hice y lo entend | sleep en scripts de Windows. Operaciones aritmtic...

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

y lo usaramos en nuestro script con una lnea como:


call sleep 10

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

02/12/2011 11:28 a.m.

Lo hice y lo entend | sleep en scripts de Windows. Operaciones aritmtic...

http://www.vicente-navarro.com/blog/2007/12/29/sleep-en-scripts-de-wi...

3 C:\>set /a 7%2 1

Esto lo encontramos documentado en la salida del set /?:


Two new switches have been added to the SET command: SET /A expression SET /P variable=[promptString] The /A switch specifies that the string to the right of the equal sign is a numerical expression that is evaluated. The expression evaluator is pretty simple and supports the following operations, in decreasing order of precedence: () ! ~ * / % + << >> & ^ | = *= /= %= += -= &= ^= |= <<= >>= , grouping unary operators arithmetic operators arithmetic operators logical shift bitwise and bitwise exclusive or bitwise or assignment

- 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

02/12/2011 11:28 a.m.

Lo hice y lo entend | sleep en scripts de Windows. Operaciones aritmtic...

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:

0:00:04.406 0:00:00.125 162689 42825 1915 346645 138732 465030

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

El pmon.exe, similar al top de UNIX:


Memory: 2096492K Avail:1207304K PageFlts: 504 InRam Kernel: 3288K P:94392K Commit: 704468K/ 513192K Limit:4033324K Peak: 717524K Pool N:44052K P:94660K Mem Mem Usage Diff 219224 -584 28 0 256 0 392 0 5212 0 13820 0 3772 0 8328 0 9896 0 3268 0 5276 0 5300 0 21848 0 Page Flts Commit Usage Pri Faults Diff Charge NonP Page 1858776 0 13178 215 9627 17590 14877 3536 32490 947 21340 23940 31536 416 0 0 0 0 0 0 0 0 0 0 0 0 Hnd Thd Cnt Cnt Image Name File Cache Idle Process System smss.exe csrss.exe winlogon.exe services.exe lsass.exe svchost.exe ati2evxx.exe svchost.exe svchost.exe svchost.exe

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

El pstat.exe, que se parece al ps de UNIX.

3 de 4

02/12/2011 11:28 a.m.

Lo hice y lo entend | sleep en scripts de Windows. Operaciones aritmtic...

http://www.vicente-navarro.com/blog/2007/12/29/sleep-en-scripts-de-wi...

El whoami.exe, que es como su tocayo UNIX:


C:\>whoami Administrator

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

Si queremos poder elegir el retardo en lnea de comandos, la instruccin sera esta:


Wscript.Sleep WScript.Arguments.Item(0)

y el comando lo ejecutamos as:


cscript sleep.vbs 5000

: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

02/12/2011 11:28 a.m.

Vous aimerez peut-être aussi