jueves, 27 de marzo de 2008

HACER UN ARCHIVO BACH (BAT)

Muchas veces necesitamos hacer una tarea muy repetitiva, o programar una tarea cada determinado tiempo (por ejemplo cuando se enciende el PC). Muchas de estas tareas se ejecutan desde la consola y resulta un poco molesto o aburridor estar digitando esa serie de ordenes para cumplir esta tarea, es por esta y otras razones que uno recurre a los famosos Scripts con los cuales podemos lograr grandes cosas en Linux por ejemplo. En Windows es posible lograrlo también a través de los archivos .bat, que son archivos de texto y sin formato que se ejecutan de manera secuencial línea por línea a través del intérprete de comandos de MS-DOS y/o Windows. A estos archivos recurro muchas veces cuando tengo que digitar muchas ordenes en la consola y me da pereza, ya que con un par de clics puedo hacerlas.

Para hacer una idea de lo que podemos hacer voy a citar un ejemplo de la utilidad de un archivo bat, por ejemplo si necesitamos cheuqear determinados puertos clave en un PC que hace las veces de servidor podriamos invetarnos este código:
Y agregar el archivo al inicio de Windows y asi cada vez que se enciende ese PC podremos saber si estos puertos estan abiertos o no. Ahora bien vamos a ver los comandos necesarios para defendernos a la hora de crear un script en bat, aunque cualquier comando que funcione en la Consola/Símbolo del sistema se puede incluir en un bat, pára mi caso usé netcat.

Voy a tirarme un rápido manual de como hacer archivos bat, batch o archivos por lotes de MS-DOS. Si alguna vez a programado algo en cualquier lenguaje me entenderán como les voy a hablar ;)

Mostrar información en la pantalla
Para mostrar información por pantalla simplemente es necesario usar el comando ECHO, teniendo en cuenta su sintáxis:
ECHO Muestra el estado de ECHO.
ECHO ON Activa el eco de las ordenes.
ECHO OFF Desactiva el eco de las ordenes.
ECHO mensaje Muestra un mensaje por pantalla.
ECHO. Muestra una línea en blanco por pantalla.
Para que en pantalla no salga el prompt del sistema cada vez que se ejecuta una línea de nuestro archivo , es decir algo asi como C:\>WINDOWS por ejemplo, debemos desactivar el eco de las ordenes colocando como primera línea del archivo la orden @ECHO OFF.

Agregando comentarios al código
Al programar es muy util poner comentarios para recordar que función cumple una línea o para servir de referencia a otro programador, para agregar un comentario a un código solo basta usar el comando REM seguido del comentario, o con dos veces 2 puntos o con signos porcentaje:
REM [comentario]

::[comentario]

% comentario %

Ejecutando a otro batch
Podemos llamar a ejecución un archivo bat desde otro, es decir que el uno puede servir de auxiliar del otro por decirlo de alguna manera. para esto usamos el comando CALL:
CALL [archivo.bat]
Una vez un archivo ejecute una llamada con CALL queda en ejecución y le da paso al segundo, una vez este termina de ejecutarse, el archivo principal retoma sui ejecución.

Ejecutando lotes
Los bat se conocen como los archivos por lotes de MS-DOS, y es porque permiten crear pequeños bloques de código (algo asi como lo que llamamos procedimientos en otros lenguajes de programación) entre los cuales podemos ir saltando. Para crear un bloque de código debemos marcarlo con una etiqueta que se define con 2 puntos seguidos del nombre, así por ejemplo:
:opcion1
ECHO Selecciono la opcion 1
GOTO end
Y para ir a otro bloque usamos la instrucción GOTO como vemos en el ejemplo, GOTO brinca a la etiqueta especificada, por ejemplo en el código anterior brincaría a la etiqueta :end. Un ejemplo más claro:
@ECHO OFF
GOTO :opcion1

:opcion1
ECHO Selecciono la opcion 1
GOTO end

:opcion2
ECHO Selecciono la opcion 2
GOTO end

:end

Vemos que :end es una etiqueta por decirlo asi muerta ya que no maneja, asi que al llegar a ella significa terminar la ejecución del código (recordemos que los bat son secuenciales); así que esta es una buena de terminar un programita ;). Por último, los nombres de las etiquetas deben ser de máximo 8 caracteres, por aquello del formato de MS-DOS que los nombres de archivos son 8+3 (nombre + extensión).


Condiciones
Para hacer programas intersantes es necesrio implementar o evaluar condiciones, asi que este pequeño lenguaje bat no le podia faltar la instrucción IF. Con IF podemos lograr muchas cosas:
IF EXIST [archivo] [comando]

Si existe el archivo determinado se ejecuta el comando indicado. para lograr lo contrario, es decir evaluar si no existe el archivo, se ejcuta asi:

IF NOT EXIST [archivo] [comando]

También podemos evaluar si se cumple una condición:
IF cadena1==cadena2 [comando]

Y hacer lo contrario:
IF NOT cadena1==cadena2 [comando]

Algunos comandos arrojan un numero de salida segun la forma en que fueron terminados, por ejemplo el programa X arroja el código cero (0) al cerrarse normalmente, entonces podriamos evaluar esa salida asi:
IF ERRORLEVEL [número] [comando]
Para entender un mejor esto veamos este otro comando.

Seleccionando opciones
Con los bat también podemos listar una serie de opciones y en base a la selección ejecutar un comando, para ellos usamos el comando CHOICE, este no esta en Windows XP pero lo podemos bajar de aqui y copiarlo en la carpeta C:\WINDOWS\System32. Para conocer la sintáxis de CHOCIE lo mejor es ejecutar CHOICE /? y aqui un ejemplo:
echo Rojo
echo Gris
echo Blanco
choice Escoja un color?? /c:rgb /t:i,10
if errorlevel 3 goto rojo
if errorlevel 2 goto gris
if errorlevel 1 goto blanco

:rojo
echo Escojió rojo
goto out

:gris
echoEscojió gris
goto out

:blanco
echo Escojió blanco

Variables
Las variables podemos introducirlas a un bat como parametros al momento de ejcutarlos, un parametro va antecedido de un signo porcentaje seguido de su posición comenzando a contar desde cero. Por ejemplo el código:

ECHO El parámetro uno es %0
ECHO El parámetro dos es %1
ECHO El parámetro tres es %2
Si lo ejecutamos asi:
C:\WINDOWS\> archivo.bat gato perro ave
En pantalla saldría:
ECHO El parámetro uno es perro
ECHO El parámetro dos es gato
ECHO El parámetro tres es ave
Ahora bien solo basta con dejar volar la creatividad y usar los parámetros, un parametro puede ser un archivo por ejemplo.

Ejecutando ciclos
Con FOR podemos ejecutar un comando a un conjunto de archivos o viceversa, o ejecutar un comando varias veces por ejemplo:
FOR IN ( num de veces ) DO
Asi por ejemplo este código:
for %%i in (1 2 3) do echo Mensaje %%i
Las variables en el for están antecedidas por %%. Sin embargo no necesariamente se debe contra desde 1 hasta n, por ejemplo:
for %%i in (2 4 6) do echo Número %%i
Por pantalla se verá:
Número 2
Número 4
Número 6
En incluso se puede aplicar a letras o palabras:
for %%i in ( a b c) do echo Letra %%i
Por pantalla se verá:
Letra a
Letra b
Letra c
Tambíen podemos aplicar un grupo de comandos a un archivo:
for %%i in (type del) do %%i ejem.txt
Este ejemplo muestra por pantalla y luego elimina a ejem.txt


Pausando la ejecución
Para detener por un momento la ejecución de un programa ejecutamos PAUSE, este suspenderá la ejecución de un programa batch hasta que se pulse una tecla para continuar. Al ejecutarse el comando PAUSE se visualiza por pantalla el mensaje:

Presione una tecla para continuar . . .

En caso de no querer mostrar este mensaje por pantalla utilizamos el comando PAUSE de esta manera:

PAUSE > NUL

NUL es un dispositivo nulo o muerto, asi que al enviar la salida de la pantalla a este no se verá nada.


Ya por último...
Con estos comando podemos defendernos, ademá de los que corran en la consola como CLS, DIR, CD, etc... y jugar con sus salidas, con las redirecciones usando <> o etc... inclusive si queremos que nuestro código quede en exe les recomiendo usar la utilidad Bat2exec para convertir un bat a exe. Los bats puede lograr muchas cosas, hasta virus existen en este lenguaje.

No hay comentarios: