BulletRojo  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.