Programación modular en Batch [By Invisible_Hack]

Iniciado por invisible_hack, 21 Noviembre 2008, 18:11 PM

0 Miembros y 1 Visitante están viendo este tema.

invisible_hack

Bueno, hace tiempo que como ya sabeis he abandonado un poco Batch para dedicarme a otro tipo de lenguajes, pero resulta que en el módulo superior de informática que estoy haciendo pues ahora estamos trabajando con Ms-Dos y sus comandos (no el Ms-Dos de Windows, porque al fin y al cabo el DOS de Windows no es más que un mero simulador) sino con el verdadero Ms-Dos, es decir, arrancando el Pc desde Ms-Dos, y usando solamente comandos, sin tocar Windows para nada...

En fin, ahora que he vuelto temporalmente al tema de Batch, me ha apetecido hacer este pequeño tutorial sobre lo que se podría llamar programación modular en Batch...

Es algo muy sencillo, no os asustéis por el nombre, y es una forma que suelo usar bastante en clases de programación, ya que, entre otras cosas, te facilita mucho las cosas a la hora de codear programas largos...  :D

La cosa es muy sencilla, os explico:

Imaginad que teneis un programa en Batch, que consta de un menú de opciones, pero que son por ejemplo 10 o 20 opciones, y se podrían poner todas seguidas dentro del código de un .bat, si, pero al ser tantas opciones corremos el riesgo de liarnos y perdernos entre tantas líneas de code...

Pondré un ejemplo con un code sencillo, para que entendáis a lo que me refiero, aunque éste code no sería necesario dividirlo en módulos, porque ésto está mas bien orientado a programas con muchas líneas complejas de código, pero bueno...

Código (dos) [Seleccionar]

@echo off
:menu
echo PROBANDO LA MODULARIDAD
echo.
echo 1. Ver contenido de una unidad
echo 2. Crear carpeta
echo 3. Borrar carpeta
echo 4. Salir
set /p opcion=opcion:
if %opcion%==1 goto 1
if %opcion%==2 goto 2
if %opcion%==3 goto 3
if %opcion%==4 goto 4

:1

set /p var=Escribe unidad que deseas visualizar
dir %var%

pause

goto menu

:2

set /p nom=Selecciona el nombre de la carpeta
MD %nom%
echo carpeta creada correctamente
pause

goto menu

:3
set /p borra= Nombre de carpeta a borrar
rd %borra%
echo carpeta destruida
pause

goto menu

:4

exit


Ahí teneis, un menú de opciones de los de toda la vida, ya sé que no son más que cuatro opciones de nada, pero quiero usar éste ejemplo sencillo para que se entienda...

Ahora voy a explicar cómo se modularía éste sencillo programa.

Creamos un archivo llamado director.bat con el siguiente código:

Código (dos) [Seleccionar]

@echo off
:menu
echo PROBANDO DIRECTORIOS
echo.
echo 1. Ver contenido de una unidad
echo 2. Crear carpeta
echo 3. Borrar carpeta
echo 4. Salir
set /p opcion=opcion:
if %opcion%==1 call unidad.bat
if %opcion%==2 call creador.bat
if %opcion%==3 call borrando.bat
if %opcion%==4 call exit


Creamos otro archivo llamado borrando.bat con el siguiente código:

Código (dos) [Seleccionar]

@echo off
set /p borra= Nombre de carpeta a borrar
rd %borra%
echo carpeta destruida
pause>nul
cls
call director.bat


Creamos otro archivo llamado creador.bat y le metemos el siguiente código:

Código (dos) [Seleccionar]

@echo off
set /p nom=Selecciona el nombre de la carpeta
MD %nom%
echo carpeta creada correctamente
pause>nul
cls
call director.bat


Creamos otro archivo llamado unidad.bat con el siguiente código:

Código (dos) [Seleccionar]

@echo off
set /p var=Escribe unidad que deseas visualizar
dir %var%
pause>nul
cls
call director.bat


Bien, ahora viene la explicación...

Usando el comando call (llamar) se puede conseguir que un .bat llame a otro .bat (o a cualquier otro archivo de cualquier otra extensión), y vamos a aprovechar ese comando para hacer la modulación en éste programa...

Como veis, el archivo principal director.bat no hace más que crear el menú de opciones y llamar a los otros tres archivos, que son los que realmente se encargan de hacer que el programa realice las funciones que debe, según la opción que teclee el usuario.

Dado que la primera opción que hay es ver el contenido de una unidad, hemos creado el bat llamado unidad.bat, que como veis, en su interior tiene los comandos necesarios para visionar la unidad que escriba el usuario. La segunda opción es crear una carpeta, y el bat llamado creador.bat tiene los comandos necesarios para crear la carpeta con el nombre que el usuario pida por consola. La tercera opción es la de borrado de carpetas, para ello hemos creado el bat llamado borrando.bat que tiene los comandos necesarios para preguntarle al usuario por consola el nombre de la carpeta a borrar. Para la última opción (salir), no necesitamos hacer un .bat con el comando exit sino que directamente podemos llamar al comando en la misma línea, es decir, fijaos en la última línea del archivo director.bat

Código (dos) [Seleccionar]

if %opcion%==4 call exit


Es decir, en lugar de estar todas las opciones del menú seguidas, como seria lo normal, cada opción es realizada por cada uno de los archivos .bat que hemos creado. Ya digo que en este caso el programa es pequeño, asi que nos bastaría con programarlo de la manera normal, pero ésto a la hora de programar cosas de mayor longitud de código nos sirve para no liarnos.

Si os fijais, lo que hace el archivo principal (es decir, director.bat) es mostrar el menú de opciones y, según el usuario teclee una u otra opción, llama a uno u otro .bat, en lugar de tener el código dentro del propio director.bat

Es decir, cada .bat representa una opción del menú mostrado por director.bat, pero director.bat no es el encargado de realizar la opción, sino simplemente muestra el menú y dependiendo de la tecla pulsada, llama a uno u otro bat para realizar una u otra operación...

Ventajas de programar de forma modular:

- Cuando se trata de programas que tienen decenas de opciones en los menús, y menús dentro de menús etc, el hecho de programar así nos facilita y agiliza mucho más la tarea, ya que vemos mejor los códigos de cada opción.

Desventajas de programar de forma modular:

- En lugar de crear solo un .bat con todo el código, creamos varios .bat`s, uno por cada opción que tenga el menú.

Autor: Invisible_Hack

Fuente: Professional Hackers 2006



"Si no visitas mi blog, Chuck te dará una patada giratoria"

WestOn

#1
Wenas, esta bien :D, pero no es cosa del otro mundo :P

un saludo ;)

PD:
CitarVentajas de programar de forma modular:

- Cuando se trata de programas que tienen decenas de opciones en los menús, y menús dentro de menús etc, el hecho de programar así nos facilita y agiliza mucho más la tarea, ya que vemos mejor los códigos de cada opción.
Eso si, opino lo mismo.
En mi cabeza existe una barrera espacio-tiempo de 4cm³. ¿Alguien sabe como eliminarla?.