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:FINCapí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 OFF2.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 %12.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 ficheroIF [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.DATCapí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 ERRORLEVELAB SONIDO– Emite sonidosAB RECUADRO– Dibuja recuadrosAB 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 WP3.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 MENSAJEA3.3 El otro DOS (DR-DOS)
DR-DOS 6 incluía órdenes no presentes en MS-DOS:
GOSUB:etiqueta– Similar a GOTO pero conRETURNpara volverSWITCH 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.SYSPará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 negrita4– Subrayado (monocromo) / Azul sobre negro (color)5– Parpadeo7– Vídeo inverso8– 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 cursorESC[2J– Borra pantalla completaESC[K– Borra desde cursor hasta final de líneaESC[s– Guarda posición del cursorESC[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";13p4.5 Métodos de ejecución
- PROMPT: Usando
$Epara 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
-QCapí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álicaESC E– NegritaESC F– Cancela negritaESC G– Doble pasadaESC W1– Modo ampliadoESC -1– Subrayado activadoESC @– 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 ERRORLEVELDELTREE– Elimina directorios completosMOVE– 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 6SWITCH– Pregunta alfabética con desvío a etiquetasGOSUB/RETURN– Subrutinas estilo BASICCPOS– 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í]