Un Instalador Batch (Primera Parte) Una alternativa práctica... En ocasiones, cuando se desea liberar un shareware o cuando es necesario distribuir una aplicación entre otros usuarios, cuyo tamaño bajo la forma de un archivo archivado no exceda de 1,44 Mega bytes, surge la necesidad de disponer de un programa ins- talador que pueda elimininar los inconvenientes que generalmente rodean a todo este proceso para los usuarios inexpertos. Lo ideal sería contar con un programa ejecutable elaborado en lenguaje C, Turbo Pascal o C++, con el cual puedan dejarse de lado todos los inconvenientes; sin embargo, si se trata de una aplicación con cierto grado de complejidad en cuanto al número de subdirectorios que posee y no disponemos de un programador, es necesario buscar una alternativa más simple. La solución a este problema consiste en utilizar un archivo de comandos por lotes, o archivo batch, que realice la instalación. Por supuesto, se parte de la base de que el usuario que prepara este archivo conoce los comandos del sistema operativo MS DOS, tiene instalado en su computador el MS DOS v5.0+ o dispone de Windows 95. Y aunque no es absolutamente indispensable, posee un compilador de archivos batch con el propósito de incrementar su velocidad de ejecución. Detalles iniciales. Imaginemos que se desea distribuir el programa de desarrollo de bases de datos bibliográficas denominado Microisis, proporcionado por el Sistema de Información en Investigación Agrícola (AGRIS) perteneciente a la Organización para la Alimentación y la Salud (FAO) de la UNESCO. Si bien es cierto que este programa viene con un instalador, existen ocasiones en las que es preciso tener el software instalado en otro directorio y asignarle el nombre de nuestro agrado. Ese programa se instala en un directorio principal denominado ISIS, el cual posee varios subdirectorios: PROG, DATA, MSG, MENU, SYS y WORK; también, incluye dos aplicaciones adicionales: AGCHKS (verificador) y el AGRIN. Este último, está conformado por tres subdirectorios: AGMN-ALL, AGMN-S&P y AGRIN-DT. El árbol (tree) que muestra la estructura del directorio de este programa se resume en este esquema: ISIS ------- AGCHKS ------- AGRIN ------ AGMN-ALL AGMN-S&P AGRIN-DT ------- DATA ------- MENU ------- MSG ------- PROG ------- WORK ------- SYS No obstante lo anterior, y con el fin de resumir la explicación de todo el proceso, asumiremos que la estructura del directorio ISIS es la siguiente: ISIS ------- DATA ------- MENU ------- MSG ------- PROG ------- WORK ------- SYS en donde DATA, MENU, etc., son los subdirectorios del directorio ISIS. De igual manera, se supone que cada uno de los archivos que integran los subdirectorios señalados, se han comprimido en un archivo archivado, los cuales llevan el nombre del directorio al que pertenecen, es decir, DATA.ZIP o DATA.EXE, etc, según sea el programa de compresión utilizado. También se desea, que el archivo instalador permita realizar la instalación desde cualquiera de las dos unidades de disco fle-- xible (A o B) y hacia la unidad de disco duro C, D, E o F. Para esta operación se aspira, además, que exista la posibilidad de crear el directorio principal con cualquier nombre deseado. En resumen, que responda a la siguiente sintaxis: SETUP UnidadFuente UnidadDestino NombreDir [ENTER] Adicionalmente, queremos que el instalador disponga de un nivel de ayuda en línea, identifique a la institución y que termine su operación si el usuario no introduce los comandos correctamente. El instalador (SETUP). Teniendo la estructura anterior es fácil escribir los comandos que formarán parte del programa instalador: - Rutina inicial (identificación de la institución). - Rutina para Comprobar la Sintaxis. - Rutina de Ayuda. - Rutina para el caso de Nombre de Directorio duplicado. - Rutina de Creación de Directorios y Subdirectorios. - Rutina de Copiado desde el disco flexible y Descompresión de cada uno de los archivos que forman parte de cada uno de los subdirectorios. - Rutina que indica si la instalación fue exitosa. - Rutina de Finalización (no es indispensable). - Rutina de Salida Común. - Compilación. - Rutina Inicial (identificación de la institución). Comprende el borrado de la pantalla (cls), ocultamiento de los comandos () y el despliegue de caracteres ASCII con el fin de suminstrar los datos de identificación. Esta rutina se presenta a continuación: cls @echo off rem rem Carmelo Rengifo A. rem Revision 04-08-1997 rem Revision 12-08-1997 rem Revision 02-03-1998 (Se agrega nombre directorio). rem echo. echo. echo. echo FONAIAP - CENIAP echo Unidad de Informacion y Documentacion echo Biblioteca Central echo. echo. echo Bases de Publicaciones Periodicas echo Contiene los titulos y la existencia de las Publicaciones... echo Venezolanas (PPV) y Extranjeras (PPE) que estan disponibl... echo "Biblioteca Central" del CENIAP. echo. echo Programa de instalacion echo. echo. echo. echo Por Favor, presione una tecla para continuar... pause > nul echo. cls echo. echo. echo Por Favor, espere un momento... echo. echo. - Comprobación de la Sintaxis. Se encarga de comprobar si el usuario introdujo corectamente los comandos que permiten realizar la instalación del programa. Se requiere que el usuario ejecute el siguiente comando para la instalación: SETUP UnidadFuente UnidadDestino NombreDir [ENTER] donde SETUP es el nombre del programa instalador; UnidadFuente. la Unidad de Disco Flexible desde la cual se realiza el proceso; UnidadDestino, la Unidad de Disco Duro en donde se instalará el el programa en cuestión; y NombreDir el nombre con el cual se designará al nuevo directorio. Para ello, se utiliza el comando IF en dos bloques. En el primero se evalúa si el usuario colocó la letra que identifica a la Unidad Fuente: A o B; mientras que en el segundo bloque se evalúa si el usuario introdujo en forma correcta la letra que identifica a la Unidad Destino (C, D, E o F). Primer bloque: rem Evalua si el usuario introduce la Unidad Fuente rem if "%1"=="" goto ayuda if "%1:"=="A:" goto otro if "%1:"=="a:" goto otro if "%1:"=="B:" goto otro if "%1:"=="b:" goto otro goto ayuda Comentarios: Si se ejecuta el comando sin colocar la letra que identifica a la la Unidad Fuente (A o B), el primer IF () lo detecta y direcciona la acción hacia el archivo de ayuda utilizando el comando "goto". Por el contrario, si introduce la letra correcta (A o B), tanto en letras minúsculas como mayúsculas la acción se dirige hacia la rutina ":otro" a través del goto (goto otro). En cualquier otro caso, la acción se dirige hacia la ayuda, por ejemplo, introducir una letra diferente, tal como C o D. Segundo bloque: rem Evalua si el usuario introduce la Unidad Destino rem :otro if "%2"=="" goto ayuda rem rem Introduce dos puntos despues de la letra. if "%2:"==":" goto ayuda rem rem No se introduce la segunda Unidad (C, D, etc) rem o se escribe con los dos puntos "C:". rem if "%2:"=="C::" goto ayuda if "%2:"=="c::" goto ayuda if "%2:"=="C:" goto bien if "%2:"=="c:" goto bien if "%2:"=="D::" goto ayuda if "%2:"=="d::" goto ayuda if "%2:"=="D:" goto bien if "%2:"=="d:" goto bien if "%2:"=="E::" goto ayuda if "%2:"=="e::" goto ayuda if "%2:"=="E:" goto bien if "%2:"=="e:" goto bien if "%2:"=="F::" goto ayuda if "%2:"=="f::" goto ayuda if "%2:"=="F:" goto bien if "%2:"=="f:" goto bien goto ayuda Este bloque de comandos IF, evalúan los siguientes aspectos: - El usuario no introduce ningún valor en el segundo parámetro; es decir, la letra que identifican al disco duro (C, D, etc). if "%2"=="" goto ayuda Por ejemplo: SETUP a ISIS - El usuario no escribe la letra e introduce dos puntos ":". if "%2:"==":" goto ayuda Por ejemplo: SETUP a : ISIS - El usuario escribe la letra e introduce dos puntos ":". if "%2:"=="C::" goto ayuda if "%2:"=="c::" goto ayuda Por ejemplo: SETUP a c: ISIS - Se introducen los valores correctamente: if "%2:"=="C:" goto bien if "%2:"=="c:" goto bien Por ejemplo: SETUP a c ISIS - Se introduce cualquier otro valor: goto ayuda Por ejemplo: SETUP a h ISIS Tercer bloque: rem :bien rem rem Verifica si el usuario introdujo el nombre del Directorio rem y si ya existe un Directorio con ese mismo nombre. rem if exist %3\nul goto duplica if "%3"=="" goto ayuda goto bueno Continuará en el Próximo Número.... ___________ MS DOS es Copyright (C) por Microsoft Corporation. Windows 3.1 es Copyright (C) por Microsoft Corporation. Windows 95 es Copyright (C) por Microsoft Corporation. Micro CD ISIS es Copyright (C) por la UNESCO.