Retomando los ficheros batch – Parte III – Instrucciones

Bueno, este es ya mi tercer artículo sobre el tema de los archivos batch y vamos a ver si podemos ir aprendiendo nuevas cositas poco a poco pero ya metiéndonos un poco más en faena pero recordad siempre que yo no soy un experto ni un usuario habitual de estos temas, es más, uno de los motivos por los que he decidido hacer unos cuantos artículos de este tipo es para tener yo también una pequeña referencia en el sitio por si el día de mañana me hiciera falta.

Puesto que tampoco quiero alargarme hasta el infinito con esto, más que nada porque solo estoy yo añadiendo contenidos y si me paso 10 días hablando de un tema quiere decir que hay otros 50 temas olvidados (son los contra de ser el único que agrega contenidos…) de los que no hablaré hasta que termine con el que empecé, bueno que me lio… lo que iba a decir es que vamos a empezar a meternos ya en harinas haciendo nuestro primer batch que soporte parámetros o modificadores… vamos con el!!

El primer código que vamos a ver es muy sencillo, es un batch que nos va a decir lo que hemos escrito, vamos a ver el código:

@echo off

echo Has escrito lo siguiente:
echo %1

Si lo ejecutamos veamos que pasa (el nombre del fichero será test):

C:tempbatch>test Hola
Has escrito lo siguiente:
Hola

C:tempbatch>

Como vemos lo repite, pero… vamos a ver un segundo supuesto:

C:tempbatch>test Hola Pablo
Has escrito lo siguiente:
Hola

C:tempbatch>

Como vemos no lo repite todo, para que lo hiciera lo deberíamos de haber escrito así:

test “Hola Pablo”

Entre comillas si señores, es como cuando trabajamos con el cmd directamente, exactamente igual, si queremos crear un directorio con un espacio o acceder a un directorio como Archivos de programa deberemos de escribir:

cd “Archivos de programa”

ó

mkdir “Videos del verano”

Ahora lo que toca es que veamos que esta pasando, si nos fijamos en el código hay una línea que es:

echo %1

Y si nos fijamos un poco esta es la que imprime el mensaje que nosotros hemos escrito, esto es porque %1 hace referencia al primer modificador que hemos añadido, %0 por lo que he podido leer por ahí se refiere al propio fichero batch y desde %1 hasta %9 son “modificadores” por lo que en el ejemplo en el que he escrito “test Hola Pablo” para que se hubiese imprimido el código tendría que haber sido el siguiente:

@echo off

echo Has escrito lo siguiente:
echo %1 %2


En este caso %1 sería igual a Hola y %2 sería igual a Pablo.

Pero veamos más cosas que ahora estamos empezando… aquí estamos empezando a ver como podemos hacer cosas con variables pero todavía no nos hemos metido por ejemplo en el tema de hacer un menú, recuerdo que cuando iba al colegio algunos compañeros hacían sus propios menús con los juegos y programas que utilizaban más a menudo, entonces no había Windows (bueno si, Windows 3.1) pero nada que ver… bueno, ahora vamos a tratar de hacer un código que nos permita elegir si lo que queremos hacer es mostrar la fecha o mostrar la hora en la pantalla, no debería ser muy complicado así que vamos a verlo.

@echo off
cls

rem MENSAJE DE BIENVENIDA AL PROGRAMA Y MENU DE SELECCION

:menu
echo Hola, estas ejecutando la utilidad fecha/hora creada por un primo
echo.
echo Selecciona la opción deseada de entre las siguientes:
echo Pulsa “h” para ver la hora
echo Pulsa “f” para ver la fecha
echo Pulsa “s” para salir
echo Pulsa lo que te la gana (que no sea una opción) para ver un error…

set /p opcion=

rem SE PROCESA EL VALOR INTRODUCIDO POR EL USUARIO

if %opcion%==h goto :hora
if %opcion%==H goto :hora
if %opcion%==f goto :fecha
if %opcion%==F goto :fecha
if %opcion%==s goto :salir
if %opcion%==S goto :salir
goto :error

rem MUESTRA LA HORA Y TERMINA
:hora
cls
echo La hora actua es:
time /t
goto :end

rem MUESTRA LA FECHA Y TERMINA
:fecha
cls
echo La fecha actual es:
date /t
goto :end

rem TERMINA
:salir
cls
echo Si no querías hacer nada, ¿para que has ejecutado el bat?
goto :end

rem MENSAJE DE ERROR
:error
cls
echo No era tan difícil ¿eh campeón?…
echo Anda, inténtalo de nuevo.
echo.
pause
cls
goto :menu

rem FIN DEL PROGRAMA
:end

Ahora viene lo mejor, cuando yo intento explicar que es lo que es… empecemos por el principio, lo que hemos visto lo voy a dar por savido ¿ok? así que no volveré a explicar lo que pasa con el “@echo off”, con el “rem” o con un “cls” lo del cls porque es un comando del terminal y no estamos viendo los comandos del cmd, y de todas formas no creo que sea un misterio… vamos con lo que nos ocupa…

Lo primero “raro” que podemos encontrarnos o que no hemos visto hasta ahora es lo siguiente:

:menu

Esto puede decirse que es un marcador, es un punto al que podremos acceder en cualquier momento mediante la instrucción goto de la siguiente forma:

goto :menu

Si nos fijamos un poco más abajo lo utilizamos donde tenemos estas líneas:

if %opcion%==h goto :hora
if %opcion%==H goto :hora
if %opcion%==f goto :fecha
if %opcion%==F goto :fecha
if %opcion%==s goto :salir
if %opcion%==S goto :salir
goto :error

Como vemos en todas las líneas al final tenemos la instrucción “goto” que nos lleva a unos marcadores, pero ahora quiero que analicemos la siguiente línea:

set /p opcion=

Esta va a ser una de las opciones principales en todos nuestros ficheros, esta línea nos permite interactuar con el programa, vamos se puede decir que mediante “set /p nombre_variable=” podemos enviar información al archivo para que este la procese y nos de un resultado o respuesta deseada y de esta forma consigamos un batch interactivo.

Esta línea nos permite enviarle datos al fichero batch, estos datos serán tratados a nuestra conveniencia (si somos capaces…) para que el programa lleve a cabo ciertas acciones, en este caso dependiendo de la tecla que pulsemos el programa mostrará la fecha o la hora, saldrá o nos dará un error, veamos parte por parte…

set /p -> Esta parte le dice a SET que la variable será introducida por el usuario en la ventana de terminal, si has probado el batch (que deberías de ir haciendo pruebas conforme yo voy escribiendo código, que para algo me mato a escribir…) te habrás dado cuenta que después de darte las opciones el programa se para y se queda esperando a que le escribas algo y presiones enter ¿verdad? es porque SET esta esperando a que le des una variable…. sigamos analizando la otra parte:

set /p opcion= -> La segunda parte que podemos ver aquí (resaltada en negrita además) es la que le da el nombre a la variable pero si nos fijamos después del igual no hay nada, esto es porque nosotros le vamos a dar el valor a la variable “opcion”.

Voy aclarando para evitar que nadie se pierda que la variable puede tener cualquier nombre, yo le he dado el nombre opcion pero podría haber cogido cualquier otro como h, var, dato, nombre, apellido, pais, dia, edad…. etc etc etc etc etc…

Seguimos… tras asignar la variable tenemos que procesarla porque como nos dice el menú según lo que introduzcamos el programa mostrará una información u otra, si presionamos la h nos dará la hora, si presionamos la f la fecha etc… pues bien para esto utilizamos IF, aunque hay otras formas más elegantes de hacerlo o más profesionales yo utilizo el método casero… veamos como es:

if %opcion%==h goto :hora

Ok, veamos, traducido al “humano” esto dice:

Si la variable opcion es igual a la h te vas a donde pone hora

¿Me explico…? lo repito un poco más serio:

Si opcion es igual a h salta a :hora

Ahora si que si, ¿no?, bueno IF es condicional es como si decimos, si me toca la lotería me compro un coche.

Bueno entonces con tranquilidad podemos saber todo lo que esta pasando hasta el momento en el que empezamos a comprobar lo que ha introducido el usuario, veamos el fragmento entero otra vez:

if %opcion%==h goto :hora
if %opcion%==H goto :hora
if %opcion%==f goto :fecha
if %opcion%==F goto :fecha
if %opcion%==s goto :salir
if %opcion%==S goto :salir
goto :error

Como vemos he puesto los valores en mayúsculas y en minúsculas, esto es porque es case sensitive, si, por primitivo que parezca todo esto de los batch es case sensitive… a lo que vamos, si nos fijamos tenemos 6 opciones con las posibles letras que nos llevarán a algún lugar del batch, pero al final de estas he dejado sin más un “goto :error” sin if y sin nada más… esto es fácil, los batch como se dijo al principio procesan línea por línea, vamos que si cuando se encuentra “if %opcion%==h goto :hora” %opcion% no es igual a h lo que va a hacer es pasar a la siguiente línea, por eso la última es la del error, porque si lo que ha introducido el usuario no coincide con ninguna opción irá pasando lineas hasta que llegue al “goto :error” donde el programa hará lo que corresponda (porque nosotros se lo hemos dicho así).

Bueno no sé si me estoy explicando muy muy bien o no pero bueno, cualquier duda me vais comentando, vamos a seguir que nos queda poquito ya… a ver, lo que nos queda es muy facilito ya y poco tiene que ver ya con nuestras habilidades para crear ficheros de procesamiento por lotes, los comandos con los que nos vamos a tropezar son:

time /t
date /t
cls

Repaso rápido

GOTO -> Pensamos en inglés Go to -> Ir a… goto nos envía a otra parte del fichero, más concretamente donde tengamos un marcador lo que quedaría así:
goto :marcador

:MARCADOR -> Referencia o punto del fichero, nos sirve para poder saltara mediante goto a ese punto y seguir procesando las instrucciones que se encuentran tras este:
:end

REM -> Remember -> Notas para que el “programador” sepa que esta pasando o que hace el programa, o en que parte del mismo nos encontramos…
rem Fin del programa

echo -> Este no lo repito, puedes ver algo en el artículo anterior, retomando los ficheros batch – Parte II – Primeras instrucciones básicas

Y bueno señores, de momento esto va a ser todo que no es poco, con estos artículos estoy seguro que escribiré si no lo he hecho ya con este el artículo con más palabras de todos los que tiene el blog, así que haber si me dejáis por lo menos algún comentario en recompensa por escribiros tanto!! y por supuesto, ya me iréis diciendo si os son de utilidad estos artículos o no.

Saludos!!!!

Sin categoría

Deja una respuesta