Técnicas de Programación para Archivos BATCH

Documento restaurado digitalmente. Nota: El texto original se conserva hasta la sección 7.5 (4DOS). Los capítulos 8 y Apéndice mencionados en el índice original no estaban disponibles en el archivo fuente.

Introducción

Cuando comencé a escribir el presente libro electrónico sobre técnicas de programación de archivos batch, nunca pensé que se convertiría en un informe de esta extensión. La verdad es que hay mucho que decir acerca de los archivos de proceso por lotes.

Aprender es sólo cuestión de tiempo. Este manual requiere conocimientos básicos del DOS, pero le aseguro que desarrollar programas con menús, gráficos, entradas de datos y sonido es muy sencillo. Con media docena de líneas de código ya tendrá una aplicación funcional.

Capítulo 1: Organización y personalización en el arranque del ordenador

1.1 A propósito de los archivos por lotes

Sería del máximo atrevimiento afirmar que los archivos de procesamiento por lotes son un lenguaje de programación. Pero con las herramientas adecuadas, un conocimiento exhaustivo del DOS y un gran derroche de imaginación, se pueden construir extraordinarios programas.

1.2 El primer fichero batch es el de arranque

Cuando se arranca el ordenador, el DOS busca en el directorio raíz un archivo AUTOEXEC.BAT. Si existe, el DOS lo lee y ejecuta línea por línea los comandos contenidos.

El comando PROMPT dispone de metacaracteres para personalizar el sistema:

  • $b – Carácter |
  • $d – Fecha del sistema
  • $e – Carácter de escape (básico para programación ANSI)
  • $g – Símbolo mayor (>)
  • $h – Carácter de retroceso
  • $l – Símbolo menor (<)
  • $n – Disco actual
  • $p – Disco y directorio actuales
  • $t – Hora actual del sistema
  • $v – Versión actual del sistema
  • $_ – Vuelta de carro, salto de línea
  • $q – Signo igual (=)
  • $texto – Agrega el mensaje que deseemos (máx. 127 caracteres)

Ejemplo práctico (GRABA.BAT):

@ECHO OFF
PROMPT $P$G
IF "%1"=="" GOTO ERROR
IF NOT EXIST %1 GOTO ERROR
COPY %1 C:\BACKUP > NUL
ECHO Copiando el fichero %1 en C:\BACKUP
GOTO FIN:ERROR
PROMPT No ha indicado el programa a copiar o éste no existe:FIN

Capítulo 2: Órdenes del DOS (Los diez mandamientos)

2.1.1 Orden @

El símbolo @ delante de cualquier orden evita que se muestre en pantalla, incluso con ECHO activado. Se usa típicamente al inicio: @ECHO OFF.

2.1.2 Orden ECHO

Muestra mensajes en pantalla. Para dejar una línea en blanco use ECHO. (con punto). Admite parámetros: %1, %2, etc.

Ejemplo: ECHO Usando el directorio %1

2.1.3 Orden REM

Sirve para introducir comentarios internos dentro del fichero por lotes.

2.1.4 Orden PAUSE

Detiene temporalmente la ejecución hasta que se pulsa una tecla. Para hacer sonar un pitido, añada la secuencia Control-G (ASCII 7):

@ECHO OFF
VER
VOL
ECHO ON
PAUSE ^G ^G ¿Quiere seguir con el proceso?
ECHO OFF

2.1.5 El símbolo % identifica a un parámetro

El símbolo %número identifica parámetros: %1 es el primer parámetro, %2 el segundo, etc. %0 es el nombre del archivo batch.

Para variables de entorno use: SET NOMBRE=valor y luego %NOMBRE%.

Ejemplo (EXTRAE.BAT):

@ECHO OFF
REM EXTRAE.BAT
SET EXTRAE=
FOR %%A IN (/%1) DO IF "%EXTRAE%"=="" SET EXTRAE=%%A
ECHO %EXTRAE%

2.1.6 Orden CALL

Permite ejecutar un segundo archivo batch desde el primero y regresar al punto de llamada. Disponible desde DOS 3.3.

@ECHO OFF
VER
VOL
CALL FORMATEA %1

2.1.7 Orden SHIFT

Desplaza los parámetros una posición: %2 pasa a ser %1, %3 pasa a ser %2, etc. Útil para procesar más de 9 parámetros.

2.1.8 Orden IF

Permite tomar decisiones. Sintaxis básicas:

  • IF [NOT] EXIST fichero orden – Comprueba si existe un fichero
  • IF [NOT] cadena1==cadena2 orden – Compara cadenas (use comillas: IF "%1"=="SI")
  • IF [NOT] ERRORLEVEL número orden – Comprueba códigos de salida

Tabla de códigos ERRORLEVEL principales:

  • FORMAT: 0=Éxito, 3=Abortado (Ctrl+C), 4=Error fatal, 5=Respuesta N
  • XCOPY: 0=Copia correcta, 1=No hay ficheros, 2=Abortado, 4=Error inicialización, 5=Error escritura
  • CHOICE (MS-DOS 6): 1=Primera tecla, 2=Segunda tecla, 255=Error
  • DEFRAG: 0=Correcto, 1=Error interno, 2=Disco lleno, 3=Abortado usuario

2.1.9 Orden GOTO

Transfiere el control a una etiqueta definida con :ETIQUETA.

2.1.10 Orden FOR

Ejecuta un comando para cada elemento de un conjunto. En archivos batch use %%A, en línea de comandos use %A.

REM ORDENA.BAT - Ordena ficheros por extensión
@ECHO OFF
IF EXIST ORDENA.DAT DEL ORDENA.DAT
FOR %%A IN (%1) DO ECHO %%A >> ORDENA.DAT
SORT < ORDENA.DAT
DEL ORDENA.DAT

Capítulo 3: Nuevos comandos interactivos para los ficheros por lotes

3.1 Norton Utilities (AB – Ampliar Batch)

El comando AB de Norton Utilities añade interactividad. Subcomandos principales:

  • AB PREGUNTA "Mensaje", teclas – Hace una pregunta y devuelve ERRORLEVEL
  • AB SONIDO – Emite sonidos
  • AB RECUADRO – Dibuja recuadros
  • AB AP – Cambia atributos de pantalla (colores)

Ejemplo de menú interactivo:

AB PREGUNTA "Ejecutar (W)ordPerfect, (d)BASE o (S)alir", wds
IF ERRORLEVEL 3 GOTO SALIR
IF ERRORLEVEL 2 GOTO DBASE
IF ERRORLEVEL 1 GOTO WP

3.2 El anónimo LETRA.COM

Programa de dominio público que espera una tecla específica y devuelve ERRORLEVEL según ASCII de mayúscula menos 64 (A=1, B=2, C=3, S=19).

@ECHO OFF
ECHO PULSE (A-C) PARA VER LOS MENSAJES O 'S' PARA SALIR
LETRA ABCS
IF ERRORLEVEL 19 GOTO FIN
IF ERRORLEVEL 3 GOTO MENSAJEC
IF ERRORLEVEL 2 GOTO MENSAJEB
IF ERRORLEVEL 1 GOTO MENSAJEA

3.3 El otro DOS (DR-DOS)

DR-DOS 6 incluía órdenes no presentes en MS-DOS:

  • GOSUB:etiqueta – Similar a GOTO pero con RETURN para volver
  • SWITCH n1, n2, n3 – Permite conmutar entre áreas de trabajo (como SELECT en BASIC)

Capítulo 4: Programación con ANSI.SYS y secuencias de escape

4.1 ANSI.SYS es un controlador de dispositivo

ANSI.SYS es un filtro que intercepta la entrada/salida de teclado y pantalla. Para cargarlo, añada al CONFIG.SYS:

DEVICE=ANSI.SYS

Parámetros: /K (teclado 84 teclas), /X (teclas ampliadas reasignables).

Nota histórica: ANSI.SYS no funciona en Windows NT/2000/XP/Vista/7/8/10/11 nativamente. Solo en DOS puro o emuladores como DOSBox.

4.2 Un artista del color en la pantalla

Secuencia de escape para colores: ESC[color m

  • 0 – Letras blancas sobre fondo negro (normal)
  • 1 – Alta intensidad o negrita
  • 4 – Subrayado (monocromo) / Azul sobre negro (color)
  • 5 – Parpadeo
  • 7 – Vídeo inverso
  • 8 – Invisible (negro sobre negro)
  • 30-37 – Colores de primer plano (30=negro, 31=rojo, 32=verde, etc.)
  • 40-47 – Colores de fondo

4.3 Control del cursor

  • ESC[fila;columnaH – Posiciona cursor
  • ESC[2J – Borra pantalla completa
  • ESC[K – Borra desde cursor hasta final de línea
  • ESC[s – Guarda posición del cursor
  • ESC[u – Restaura posición del cursor

4.4 Un virtuoso de las teclas (Reasignación)

Sintaxis: ESC[código_tecla;"valor"p

Ejemplo para redefinir F1 con DIR:

PROMPT $E[0;59;"DIR";13p

4.5 Métodos de ejecución

  • PROMPT: Usando $E para el carácter Escape
  • ECHO: Usando ALT-27 o CTRL-P + ESC en el editor
  • TYPE: Leyendo un archivo de texto con códigos ANSI

Capítulo 5: Uso del DEBUG para preguntas interactivas

5.1 El depurador

DEBUG es una orden externa del DOS que sirve como depurador binario. Se gestiona con órdenes propias (A, C, D, E, Q, R, U, W).

Nota: DEBUG no existe en Windows de 64 bits. Fue eliminado en Windows 7 y posteriores (solo disponible en versiones de 32 bits).

5.2 Cómo desnudar a un programa (Ejemplos)

SN.COM – Programa de Sí/No:

C:\>DEBUG SN.COM
-A 100
1CAE:0100 MOV AH,08; Rutina para obtener caracteres del DOS
1CAE:0102 INT 21; Llamada a la rutina
1CAE:0104 CMP AL, 53; ¿Se ha pulsado la tecla S?
1CAE:0106 JZ 010E; Letra válida. Saltar al final
1CAE:0108 CMP AL, 4E; ¿Se ha pulsado la tecla N?
1CAE:010A JZ 010E; Letra válida. Saltar al final
1CAE:010C JMP 0100; Bucle hasta obtener carácter válido
1CAE:010E MOV AH, 4C; Rutina para terminar programa DOS
1CAE:0110 INT 21; Fin del programa
1CAE:0112
-R CX
CX 0000:12
-W
-Q

Capítulo 6: Códigos de control para impresora

6.1 Códigos ESC/P (Epson/IBM)

  • ESC 4 – Cursiva o itálica (Epson)
  • ESC 5 – Cancela itálica
  • ESC E – Negrita
  • ESC F – Cancela negrita
  • ESC G – Doble pasada
  • ESC W1 – Modo ampliado
  • ESC -1 – Subrayado activado
  • ESC @ – Resetea todos los códigos

6.2 Ejemplo práctico (SETTIPO.BAT)

@ECHO OFF
CLS
IF "%1"=="" GOTO AYUDA
ECHO Preparando estilos de impresión
GOTO %1:BUCLE
SHIFT
IF "%1"=="" GOTO FIN
GOTO %1:AYUDA
ECHO Use: AMPL, COND, SUBR, NEGR, BOLD o RESET
GOTO FIN:AMPL
ECHO W1 > LPT1
GOTO BUCLE:NEGR
ECHO E > LPT1
GOTO BUCLE
:RESET
ECHO @ > LPT1
:FIN

Capítulo 7: Más allá del DOS 5

7.2 MS-DOS 6

Novedades relevantes para batch:

  • CHOICE – Espera entrada de usuario y devuelve ERRORLEVEL
  • DELTREE – Elimina directorios completos
  • MOVE – Mueve ficheros entre directorios
  • Menús de arranque en CONFIG.SYS (MENUITEM, MENUDEFAULT, MENUCOLOR)
  • Variable de entorno %CONFIG% para AUTOEXEC.BAT

7.3 Novell DOS 7

Incluía multitarea preemptiva y comandos adicionales:

  • CHOICE – Compatible con MS-DOS 6
  • SWITCH – Pregunta alfabética con desvío a etiquetas
  • GOSUB/RETURN – Subrutinas estilo BASIC
  • CPOS – Posiciona cursor (requiere ANSI.SYS)
  • TIMEOUT – Espera determinado tiempo antes de ejecutar

7.5 4DOS (inicio)

Procesador de órdenes alternativo compatible con DOS, mucho más potente que COMMAND.COM. Incluía:

  • Variables de entorno de 512 a 32.000 bytes
  • Aliases y macros de teclado
  • Historial de comandos avanzado

[El documento original se interrumpe aquí]