Comandos goto, if y else

Muchas veces vamos a necesitar dividir nuestro programa en partes (a partir de ahora las llamaremos menús), y que dependiendo alguna condición vaya a un menú u otro. Más adelante veremos un ejemplo de para qué sirve esto.

Para crear un menú pondremos en una lína el código :nombre (con los dos puntos), de forma que indicamos que ahí empieza un menú que se llama nombre. Luego usaremos el código goto nombre para ir al menú nombre. De esta forma vamos a hacer como ejemplo un programa que al empezar tenga un menu llamado frases en el que escriba dos frases, y luego tenga un comando goto frases, de forma que el programa vuelve atrás al menú frases y nunca acaba (esto se llama bucle). Este programa sería por ejemplo así:


@echo off
title Bucle de ejemplo
color 0A

:frases
echo 100101001001010010010100101001001010010010
echo 011010110110101101101011010110110101101101

goto frases
exit

El código if nos sirve para hacer que en el caso de que algo sea cierto o falso haga otra cosa. Por poneros un ejemplo, imaginaos que queremos hacer la división de dos números, pero si el denominador es 0 no podemos hacerla, puesto que algo entre 0 es infinito. Por lo tanto tenemos que verificar que el número de abajo no sea 0 para que no dé error, y si es 0 que le vuelva a preguntar el número. Este programa lo crearemos ahora de ejemplo.

Pues bien, el código de if tiene esta estructura:
if %var%==valor (comando) else (comando2)
Esto hace que si la variable llamada “var” tiene el valor “valor” ejecute el código “comando”, y si no tiene ese valor que realize el valor “comando2”. También podemos eliminar la segunda parte si no la necesitamos y dejar el código de la siguiente forma:
if %var%==valor (comando)

De esta forma vamos a hacer el programa de dividir un número entre otro:


@echo off
title Division de dos numeros
set/p uno=Escriba el numerador

:denominador
set/p dos=Escriba el denominador

if %dos%==0 (goto nosepuede) else (goto dividir)

:nosepuede
echo El denominador no puede ser cero.
goto denominador

:dividir
set/a tres=%uno%/%dos%
echo El resultado de %uno%/%dos% es %tres%
pause>nul
exit

Ahora vamos a remalcar un par de cosas. Primero que podemos sustituir el comando if por if not, de forma que realiza el comando si la condición no es verdad.

Lo segundo es que si os fijais usamos == en vez de un solo =. Cuando comparamos dos cosas tenemos que usar siempre el doble signo ==. Además de los signos igual podemos usar las siguientes cosas:
%var% == valor Verifica si var es igual al valor
%var% LSS valor Verifica si var es menor que el valor
%var% GTR valor Verifica si var es mayor que el valor
%var% LEQ valor Verifica si var es menor o igual al valor
%var% GEQ valor Verifica si var es mayor o igual al valor

Para finalizar vamos a hacer un ejemplo más que será un programa para hacer la media, pero esta vez no será entre dos números, sino que los elegirá el usuario. Este programa tendría la siguiente estructura:


@echo off
title Hacer media de dos numeros
:principio
set/p cant=Entre cuantos numeros quiere hacer la media?
set/a contador=%cant%
set total=0

if %cant% LSS 2 (goto mal) else (goto pregunta)

:mal
echo Debe indicar un numero mayor o igual que 2
goto principio

:pregunta
set/p num=Escriba uno de los %cant% numeros
set/a total=%total%+%num%
set/a contador=%contador%-1
if not %contador% == 0 (goto pregunta)

set/a media= %total% / %cant%
echo.
echo La media es %media%
pause >nul
exit

Aquí tenéis un ejemplo donde ponemos dos condiciones en el IF:

@echo off
title Condiciones en el IF
set/p test=Introduce tu edad: 
if %test% GTR 17 (
 if %test% LSS 30 (
 echo Puedes pedir la BECA tu solito
 ) else ( 
 echo Ya no puedes pedir la BECA
 )
) else (
 echo Tus padres tienen que pedir la BECA
)

pause>nul
exit

Os dejo además un menú con opciones:

@echo off
 
:Menu
 cls
 set opcion=
 
 echo Elige una opcion...
 echo.
 echo 1 - Reiniciar equipo 1
 echo 2 - Reiniciar equipo 2
 echo 3 - Reiniciar equipo 3
 echo 4 - Salir
 
 set /p opcion=
 
 if (%opcion%) == (1) goto Re1
 if (%opcion%) == (2) goto Re2
 if (%opcion%) == (3) goto Re3
 if (%opcion%) == (4) goto Salir
 
 echo.
 echo. Opcion incorrecta
 echo.
 pause
 goto Menu
 
:Re1
 shutdown -r -t 0 -m \\Equipo1
 pause
 goto Menu
 
:Re2
 shutdown -r -t 0 -m \\Equipo2
 pause
 goto Menu
 
:Re3
 shutdown -r -t 0 -m \\Equipo3
 pause
 goto Menu
 
:Salir
 Exit
Tags: × × × ×

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*