Desde los ya lejanos tiempos del MS-DOS disponemos de la posibilidad de crear archivos de texto que pueden procesar comandos, a esos archivos anteriormente se los llamaba “de lotes” y ahora el nombre más común es “de comandos”.

Los archivos de lotes tienen la extensión .BAT (de batch = lote, en inglés) y los archivos de comandos tienen la extensión .CMD (de command = comando, en inglés).

Aunque las extensiones son distintas funcionan exactamente igual.

¿Y para qué necesitaríamos crear un archivo de lotes o de comandos?

Bueno, en general no los necesitaremos pero a veces es interesante saber como utilizarlos porque nos pueden quitar de apuros. Por ejemplo, un usuario nos dice que necesita ver un informe que nuestra aplicación no le provee. Una solución simple y sencilla es crear un archivo de texto con extensión .BAT o .CMD que le enviamos por e-mail o algún otro medio electrónico, le pedimos que ejecute ese archivo y listo, asunto solucionado. Desde luego que algo así es un parche, algo momentáneo, para sacarnos del apuro, más tarde haremos las cosas bien, con una pantalla bien diseñada y todo eso, pero mientras tanto ese archivo nos soluciona el problema.

Un ejemplo de un archivo de lotes o de comandos

A continuación verás el código fuente de uno de tales archivos, debes abrir el Bloc de Notas, copiar el código y luego grabarlo con la extensión .BAT o .CMD, verifica que se grabe con una de esas dos extensiones y no con .TXT o alguna otra porque en ese caso no te funcionará.

@ECHO OFF

REM --- Asignando valores a las variables de entorno

SET CARPETAORIGINAL=%CD%
SET CARPETAISQL="C:\Program Files\Firebird\Firebird_2_5\bin\"
SET SCRIPT="E:\SQL\DATABASES\SCRIPT1.SQL"
SET BASEDATOS='E:\SQL\DATABASES\BLOG_DB.FDB'
SET USUARIO=SYSDBA
SET CONTRASENA=masterkey

REM --- Creando el archivo de script

ECHO SET NAMES ISO8859_1;>%SCRIPT%
ECHO SET SQL DIALECT 3;>>%SCRIPT%
ECHO -->>%SCRIPT%
ECHO CONNECT %BASEDATOS% USER %USUARIO% PASSWORD %CONTRASENA%;>>%SCRIPT%
ECHO -->>%SCRIPT%
ECHO SET AUTODDL ON;>>%SCRIPT%
ECHO -->>%SCRIPT%
ECHO SELECT CLI_IDENTI, CLI_NOMBRE FROM CLIENTES;>>%SCRIPT%
ECHO -->>%SCRIPT%
ECHO EXIT;>>%SCRIPT%

REM --- Ejecutando el programa ISQL.EXE con el archivo de script

CD /D %CARPETAISQL%
ISQL<%SCRIPT%

REM --- Regresando a la carpeta donde se encuentra el archivo batch

CD /D %CARPETAORIGINAL%

REM --- Finalizando el archivo batch

ECHO .
ECHO El script ha finalizado.
PAUSE

Entendiendo el archivo de lotes o de comandos anterior

Si aún no has usado archivos de lotes o de comandos (son sinónimos) entonces el código anterior podría parecerte algo muy complicado. Pues no, no es así, es sumamente sencillo de entender. Veamos:

  • @ECHO OFF se usa para que no se muestre la línea que se está ejecutando. Si escribes la palabra REM delante de esta línea (REM significa que es un comentario) verás la diferencia
  • Si escribes la palabra REM y un espacio en blanco, todo lo que escribas a continuación en esa misma línea será un comentario
  • El comando SET sirva para declarar una variable y asignarle un valor. IMPORTANTE: No debes dejar espacios en blanco ni antes ni después del símbolo de igual, o no te funcionará la variable que declaraste.
  • Si se rodea a una palabra con el símbolo de porcentaje %PALABRA%, eso significa que se trata de una variable, no de una constante. Y en ese caso se usará el valor que tenga la variable
  • El comando ECHO envía a la pantalla el texto que se encuentra a continuación
  • La salida se puede redirigir, eso es, enviar a otro lado. Por ejemplo, el comando ECHO por defecto envía la salida a la pantalla pero si lo deseamos podemos redirigirla a la impresora, a un archivo de texto, a un puerto serie, etc.
  • Para redirigir la salida se puede usar un símbolo mayor que > o dos símbolos mayor que >>. En el primer caso, se crea un archivo con el nombre que viene a continuación y se le agrega la línea. En el segundo caso se agrega esa línea al final del archivo cuyo nombre viene a continuación, o sea que el archivo ya debería existir
  • La entrada también se puede redirigir. Eso significa que le podemos enviar parámetros a un programa y esos parámetros pueden ser variables. Para redirigir la entrada se usa un símbolo menor que <
  • El comando PAUSE muestra el mensaje: Presione una tecla para continuar …

Explicando el archivo de lotes o de comandos anterior

Ahora que ya sabemos el significado de los distintos token, podemos entender como funciona el archivo de lotes o de comandos:

  1. Con @ECHO OFF se evita que cada línea que se ejecuta se muestre en la pantalla
  2. Con el comando SET se declaran variables y se les asignan valores. Si nos fijamos en la variable CARPETAORIGINAL veremos que su valor es %CD%. ¿Qué significa eso? que se guardará en ella la carpeta actual, la carpeta donde se encuentra el archivo de lotes, por ejemplo: E:\SQL\DATABASES\, ¿por qué eso? porque al usar %PALABRA% lo que se hace es obtener el valor de esa variable. Hay algunas variables pre-definidas, o sea que el Sistema Operativo se encarga de asignarles un valor, algunas de esas variables son %DATE%, %TIME%, %USERNAME%, %CD%, etc.
  3. Usamos el comando ECHO para crear un archivo de texto. Para que funcione, debemos redirigir la salida a ese archivo de texto. Recuerda que si a continuación de ECHO hay un solo símbolo > se crea el archivo pero en cambio si hay dos >> se agrega al final. La ruta y el nombre de ese archivo se encuentran en la variable %SCRIPT%
  4. Usaremos el archivo de texto que estamos creando para conectarnos a la Base de Datos y para ejecutar un comando SELECT en ella. Desde luego que tú podrías tener muchos SELECTs, INSERTs, UPDATEs, etc., lo que quieras
  5. A continuación de CONNECT vemos que dice %BASEDATOS%. Eso significa que tratará de conectarse a la Base de Datos cuya ruta y nombre se encuentra en la variable %BASEDATOS%
  6. Así mismo, se usará el contenido de las variables %USUARIO% y %CONTRASENA% para obtener el nombre del usuario y su contraseña, respectivamente
  7. Los ECHO – – solamente sirven para separar líneas, no tienen otra utilidad
  8. La línea CD /D %CARPETAISQL% sirve para ubicarse en el disco duro y en la carpeta cuyos datos se encuentran en la variable %CARPETAISQL%
  9. Estando en esa carpeta, se ejecuta el programa ISQL.EXE, el cual recibe como entrada el archivo de texto que creamos recién, y cuyo nombre se encuentra en la variable %SCRIPT%
  10. Cuando finaliza la ejecución del archivo (o sea, después del SELECT), finaliza el programa ISQL.EXE
  11. Se regresa a la carpeta original, o sea a la carpeta donde se encuentra el archivo .BAT o .CMD
  12. Se le muestra un mensaje al usuario, y se le pide que presione una tecla

Simplificando:

Este archivo .BAT o .CMD creó un archivo de texto con el nombre SCRIPT1.SQL en la carpeta E:\SQL\DATABASES\ para conectarse a la Base de Datos BLOG_DB.FDB que se encuentra en la carpeta E:\SQL\DATABASES\. Luego hizo un SELECT a la tabla de CLIENTES.

El resultado de todo lo anterior lo podemos ver a continuación:

BATCH2

Captura 1. Si haces clic en la imagen la verás más grande

 BATCH1Captura 2. Si haces clic en la imagen la verás más grande

En la Captura 1 vemos el archivo de texto creado, que en este caso tiene el nombre SCRIPT1.SQL (desde luego que tú puedes darle otro nombre si quieres) y en la Captura 2 vemos el resultado de ejecutar al programa ISQL.EXE cuando recibe como parámetro de entrada al archivo SCRIPT1.SQL

Conclusión:

Poder crear un archivo .BAT o .CMD para desde él ejecutar comandos del Firebird puede sernos de mucha utilidad en algunas ocasiones, es un arma más, una herramienta más, que tenemos y que debemos saber aprovecharla.

Desde luego que la técnica que hemos visto aquí no solamente sirve para el Firebird y para el programa ISQL.EXE, sirve para cualquier otro programa también, por ejemplo: GBAK.EXE, NBACKUP.EXE, GFIX.EXE, GSEC.EXE y para casi cualquier otro programa Windows.

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21