Hola Comunidad !!!
Un libro que encontré en un ordenador 486DX en un formato bastante extraño, pero tras probarlo con distintos editores logre encontrar uno que si lo leyó bastante bien, el libro esta espetacular, es el mejor que he leído y es del 1993, época en el que el BATCH predominaba las computadoras :P
DEDICADO A LOS AMADORES DE ESTE LENGUAJE
----------------------------------------------------------------------------------------------
Carlos Mesa
################################################
# TECNICAS DE PROGRAMACION PARA ARCHIVOS BATCH #
################################################
Se incluye con el disquete de la recopilaci¢n UTILIDADES+2
(S¢lo en la versi¢n registrada)
Tercera revisi¢n: Noviembre 1994
Indice
------
Introducci¢n...................................... ......... 1
C¢mo utilizar este libro electr¢nico....................... 2
Cap¡tulo 1
Organizaci¢n y personalizaci¢n en el arranque del ordenador
1.1 A prop¢sito de los archivos por lotes.................. 4
1.2 El primer fichero batch es el de arranque.............. 4
Cap¡tulo 2
Ordenes del DOS
2.1 Los diez mandamientos..................................8
2.1.1 Orden @.........................................8
2.1.2 Orden ECHO......................................8
2.1.3 Orden REM.......................................8
2.1.4 Orden PAUSE.....................................9
2.1.5 El s¡mbolo % identifica a un par metro..........9
2.1.6 Orden CALL......................................11
2.1.7 Orden SHIFT.....................................12
2.1.8 Orden IF........................................12
2.1.9 Orden GOTO......................................17
2.1.10 Orden FOR......................................18
Cap¡tulo 3
Nuevos comandos para los ficheros por lotes
3.1 Norton, el rey Midas de la inform tica, proporciona un
nuevo comando..........................................2 0
3.2 El an¢nimo LETRA.COM...................................24
3.3 El otro DOS............................................25
3.4 Y a£n hay m s..........................................26
Cap¡tulo 4
Programaci¢n con ANSI.SYS y secuencias de escape
4.1 ANSIS.SYS es un controlador de dispositivo.............29
4.2 Un artista del color en la pantalla....................30
4.3 No hace falta Windows para perder el cursor............33
4.4 Un virtuoso de las teclas..............................36
4.5 La pantalla muestra sus atributos con otras ¢rdenes....41
4.6 Reduzca el trabajo pesado con otras herramientas.......43
4.7 M£sica, maestro........................................44
4.8 Ejecutando reclusos ANSI...............................46
/ i
Cap¡tulo 5
Uso del DEBUG para preguntas interactivas
5.1 El depurador, un tipo duro, que trata a los archivos como
series de bytes........................................48
5.2 ¨C¢mo desnudar a un programa?..........................48
5.3 Ensamblador para inmortales............................52
Cap¡tulo 6
C¢digos de control para impresora
6.1 El lenguaje de la impresora no es nada vulgar..........55
6.2 Los experimentos del doctor Escape.....................56
6.3 El c¢digo ASCII 12 es hembra...........................60
Cap¡tulo 7
M s all del DOS 5
7.1 La batalla de los titanes del DOS......................62
7.2 ¨MS-DOS 6? *No es para tanto!..........................62
7.3 Novell DOS 7, la £ltima frontera.......................73
7.4 PC-DOS 6.3, recogiendo las migas.......................76
7.5 4DOS, todo lo que siempre quiso del DOS y gratis.......77
7.6 El legado del DOS......................................81
Cap¡tulo 8
Ejemplos, trucos y t‚cnicas para los archivos batch
8.1 La prueba de fuego.....................................82
8.2 Se¤or batch, ¨me da fuego, por favor?..................87
8.2.1 Desactivando el eco para todas las versiones del
DOS............................................... ....87
8.2.2 Borrar ficheros validando el mensaje de
confirmaci¢n...................................... ....88
8.2.3 Bucles concatenados.............................88
8.2.4 Comprobar la existencia de un directorio........89
8.2.5 Comprobando si un programa est en el directorio o
path actual...........................................8 9
8.2.6 A¤adir un nuevo directorio al path..............89
8.2.7 Comparando dos ficheros.........................89
8.2.8 Comprobando par metros con caracteres comodines.90
8.2.9 Protecci¢n para los ficheros bacth..............90
8.2.10 C¢mo obtener el primer car cter de un par metro91
8.2.11 Algo m s acerca de los par metros..............91
8.2.12 C¢mo redefinir algunas teclas..................92
8.2.13 Prompts de gran vistosidad.....................92
8.3 Una obra maestra.......................................94
8.4 A toda potencia con el DOS.............................97
Ap‚ndice.......................................... .........99
/ ii
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. Lo cierto es que ide‚ estas p ginas como una serie
de art¡culos para una desaparecida publicaci¢n inform tica.
Pero a medida que fu¡ escribiendo p gina tras p gina, probando
ejemplos una y otra vez, y buscando informaci¢n indocumentada
sobre el DOS, pens‚ en la posibilidad de convertir el informe
en un libro que acompa¤ase a una serie de utilidades y
herramientas imprescindibles para el programador y usuario
avanzado de los archivos batch. As¡ nacieron las UTILIDADES+2,
una recopilaci¢n de utilidades capaces de convertir los
ficheros batch en un potente compilador que no precisa grandes
conocimientos de lenguajes de programaci¢n.
As¡ pues, junto al libro electr¢nico, encontrar los tan
anhelados ficheros: una selecci¢n de programas propios y de
dominio p£blico. El disquete dispone de un fichero de
instalaci¢n en el disco duro y un archivo de documentaci¢n
sobre los servicios que presta cada fichero.
Aprender es s¢lo cuesti¢n de tiempo. Lo digo porque soy
el primero en reconocer que no est ante un manual dedicado a
las ¢rdenes del DOS, apto para todo tipo de usuarios. He de
confesar que se requiere conocer el conjunto de ¢rdenes que el
DOS utiliza para comunicarse con el usuario, es decir, es
obligatorio poseer ciertos conocimientos pr cticos. De modo
que no se llame a enga¤o. Si acaso s¢lo se le exige un nivel
b sico; es cuesti¢n de hacer pruebas con su sistema operativo,
comprobando en la pr ctica qu‚ hace y qu‚ no hace cada
comando. *As¡ empezamos todos!
Una vez est‚ desenvuelto en la pr ctica de los ficheros
batch, encontrar que este libro electr¢nico es un manual
imprescindible para hacer sus primeros pinitos. Dispondr de
todo lo necesario para crear programas con men£s, gr ficos,
entradas de datos y sonido. Y le aseguro que desarrollar un
programa de este tipo es muy sencillo, tanto que con media
docena de l¡neas de c¢digo ya tendr una aplicaci¢n. A menudo
le ocurrir que cuando muestre los resultados de su programa a
sus amigos, estos le mirar n con incredulidad diciendo que no
es posible que un fichero batch haga todo eso. Deje que otros
sigan programando en Clipper o C, si bien usted, con escasa
dedicaci¢n, habr desarrollado en un corto espacio de tiempo
lo mismo que esos otros han tardado en realizar varios d¡as.
Carlos Mesa
Barcelona, enero 1993 / octubre 1994
P gina 1
C¢mo utilizar este libro
------------------------
Este libro trata de los ficheros batcor
cien la potencia de los ficheros batch.
P gina 3
Cap¡tulo 1
ORGANIZACION Y PERSONALIZACION 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 -aqu‚l que han perdido
los programamadores ante la facilidad de los nuevos
compiladores- se pueden construir extraordinarios programas,
impensables para quienes desconocen las posibilidades que
brindan las ¢rdenes del sistema operativo. El siguiente libro
electr¢nico -complemento de las UTILIDADES+2- aborda en
profundidad el estudio de tales ¢rdenes, ofreciendo
soluciones, trucos, herramientas, mostrando programas,
estudiando ensamblador, y explicando sencillas propuestas de
programaci¢n gr fica.
1.2 El primer fichero batch es el de arranque
Muchos usuarios personalizan su sistema cambiando el
indicador del DOS. Se entiende que, por defecto, el DOS
presenta el indicador de la unidad de disco con la que estemos
trabajando m s el s¡mbolo mayor (>).
El comando PROMPT dispone de una serie de combinaciones a
las que se denomina metacaracteres. Cada metacar cter va
precedido del signo de d¢lar ($). Al ejecutarse el PROMPT, se
presenta el texto que tiene asociado cada metacar cter o el
mensaje que nosotros le hayamos indicado.
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, desde
el primero al £ltimo. Si el DOS no puede encontrar el fichero
AUTOEXEC.BAT en el directorio ra¡z, aparece un mensaje de
derechos de autor y ejecuta los comandos DATE y TIME.
Un ejemplo de archivo AUTOEXEC.BAT ser¡a el siguiente:
@ECHO OFF
PATH C:\DOS
PROMPT $P$G
Como puede verse, el PROMPT personaliza el sistema
haciendo aparecer el disco y directorio actuales m s el
s¡mbolo mayor. La mayor¡a de usuarios presenta en el indicador
del DOS el directorio en el que se encuentran, siendo ‚sta la
orden m s frecuente de un archivo AUTOEXEC.BAT. No obstante,
hay usuarios que se complican mucho m s el PROMPT e incluso
P gina 4
Digital Research, en su DR-DOS 6.0, agregaba un mensaje en el
PROMPT durante el proceso de instalaci¢n.
Resulta muy dif¡cil recordar todos los metacaracteres.
Hay que acudir al manual del DOS o a un libro; y, por cierto,
he de decir que no siempre est n contemplados todos ellos.
Para compensarlo, he aqu¡ la lista:
Metacar cter Texto asociado al mismo
$b |
$d Fecha del sistema
$e Car cter de escape (al que m s
adelante me referir‚ como parte b sica
de la programaci¢n gr fica y ANSI)
$g >
&h Car cter de retroceso
$l <
$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 =
$texto texto
Este £ltimo agrega el mensaje que nosotros deseemos
-hasta un m ximo de 127 caracteres, pues ‚ste es el m ximo
permitido en cada orden-, personalizando de ese modo nuestro
sistema.
Con todo, este comando sirve adem s para simular mensajes
con preguntas simples al usuario. Comprob‚moslo. Supongamos el
siguiente listado:
@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
Este fichero que se puede llamar GRABA.BAT, copia el
fichero introducido como par metro de GRABA en el directorio
C:\BACKUP. Lo primero que hace el programa es comprobar si se
ha introducido alg£n par metro y, luego, si existe el fichero
que se desea copiar. Si no es as¡, la orden GOTO env¡a el
control a la etiqueta :ERROR (esto es as¡, porque los archivos
de procesamiento por lotes s¢lo pueden ejecutar una orden
v lida en cada l¡nea). El PROMPT emite un mensaje que no
desaparecer de pantalla, por mucho que se intente, hasta que
no se introduzca el nombre del programa con el par metro
adecuado. Cuando esto sucede, el primer PROMPT restablece el
P gina 5
indicador del DOS, comprueba de nuevo el par metro, y copia el
fichero al directorio establecido. Con NUL redireccionamos el
mensaje del DOS de copiado a un dispositivo nulo, y ECHO hace
aparecer el nuestro (en castellano). El pr¢ximo GOTO env¡a la
secuencia a la etiqueta :FIN, salt ndose el PROMPT que
contiene el mensaje de error.
Un aviso. Se puede evitar el mensaje de salida de algunas
¢rdenes, redireccionando la salida a un dispositivo nulo, pero
existen algunas ¢rdenes que no se ejecutan, de este modo,
correctamente. Un ejemplo t¡pico es la orden DEL. Si no
encuentra el fichero a borrar, sigue apareciendo un mensaje;
en este caso, el de "Fichero no encontrado". Con un poco de
inventiva, se pueden soslayar estos problemas. Por ejemplo, el
caso anterior se soluciona con un IF EXIST FICHERO DEL
FICHERO.
Volviendo al tema; como puede verse, el PROMPT,
sabi‚ndolo usar, puede sernos de utilidad en algunas
circunstancias.
Pero ya que estamos con las ¢rdenes m s frecuentes de un
archivo AUTOEXEC.BAT, conviene hacer un inciso sobre uno de
los comandos de los que pocas veces nos servimos: PRINT.
Por defecto, siempre que queremos imprimir un fichero de
texto ASCII desde la l¡nea de comandos, escribimos PRINT
seguido del fichero de texto. El problema est en que,
dependiendo del tipo de impresora y del trabajo a realizar
habitualmente, obtenemos resultados desastrosos, como colapsos
y desajustes del papel por falta de tiempo entre la impresi¢n
de archivos. Con los distintos par metros que admite PRINT se
pueden indicar preferencias, como la impresora utilizada (PRN
para las impresoras en paralelo y COM1 para las impresoras
serie), el tama¤o de la cola de impresi¢n (hasta 32 archivos)
y varios indicadores que establecen el tiempo empleado en la
impresi¢n. Por consiguiente, es necesaria la tabla antes de
proseguir con m s aclaraciones.
[Par metros] [Funci¢n]
/b Especifica el tama¤o de la memoria de
impresi¢n.
/c Cancela los archde los nombres de los
comandos cuando el DOS los ejecuta como parte de un archivo
batch. Pero esto no es todo. En muchas ocasiones querr
mejorar la apariencia de la pantalla y dejar una l¡nea en
blanco entre los distintos mensajes que ha asociado a la orden
ECHO. Para dejar una l¡nea en blanco tiene que utilizar este
comando seguido de un punto (ECHO.). Si no emplea el DOS 5 (o
superior) y desea conseguir una l¡nea en blanco, tendr que
usar el car cter 255 del juego de caracteres extendido ASCII
(ALT-255, despu‚s de la orden ECHO). Por otro lado, la orden
ECHO admite par metros. Cuando aparece un car cter %n£mero que
identifica los par metros de los ficheros por lotes, se
sustituye por el valor del par metro al que corresponde. Para
que lo veamos m s claro, si el primer par metro de un fichero
por lotes es C:\NORTON, para la siguiente orden:
ECHO Usando el directorio %1
... obtendr¡amos el siguiente mensaje:
Usando el directorio C:\NORTON
Tenga en cuenta que los s¡mbolos especiales deben ir
encerrados entre comillas (ej. ECHO Utilice el car cter '>').
2.1.3 Orden REM
La orden REM sirve para introducir comentarios internos
dentro de un fichero por lotes. Suele identificar la cabecera
de un archivo batch con informaci¢n complementaria acerca del
programador y del programa. Y ya que se hace menci¢n del
principio de un fichero, vayamos al final de ‚ste. Podemos
interrumpir la ejecuci¢n de un archivo con la secuencia
P gina 8
Control-C (F6). Veamos un ejemplo:
REM Programa HORA.BAT
REM Por Pepe Botella
TIME
@ECHO ¨Es correcta la hora?
@ECHO Si no es as¡, salga del programa y c mbiela
^C
DATE
Cuando ejecute el programa, ‚ste le dar‚ el informe de la
hora actual. Si no es correcta, cuando aparezca el mensaje
"¨Terminar el procesamiento por lotes?", teclee S. Si la hora
es correcta, tecleando N, pasar la acci¢n al siguiente
comando, que le informar del d¡a actual.
2.1.4 Orden PAUSE
Evidentemente, existe una orden para detener
temporalmente la ejecuci¢n de un fichero por lotes hasta que
se pulsa una tecla: PAUSE. Si le asociamos un mensaje,
presentar ‚ste en pantalla. Pero cuidado, ECHO OFF suprime la
aparici¢n del mensaje de usuario que se haya asociado con
PAUSE. Para habilitar la aparici¢n de los mensajes debe
activar y desactivar el ECHO antes y despu‚s de PAUSE.
@ECHO OFF
VER
VOL
ECHO ON
PAUSE ¨Quiere seguir con el proceso?
ECHO OFF
Otro truco consiste en avisar al usuario cuando el
proceso haga una pausa, haciendo sonar un pitido en el altavoz
del ordenador. Para ello, simplemente debemos a¤adir la
secuencia Control-G. Tomaremos como referencia el ejemplo
anterior:
@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 sirve para identificar dentro de un
fichero por lotes, los distintos par metros que recibe del
archivo batch al ejecutarse. La constante NUMERO ha de ser un
n£mero decimal entero comprendido entre 0 y 9 (ambos
incluidos). %1 ser¡a el primer par metro, %2 el segundo
par metro, %3 el tercero..., mientras que %0 ser¡a el nombre
P gina 9
(con o sin trayectoria) del archivo batch.
Si crea un archivo por lotes que haga uso de tres
par metros, piense que algunas ¢rdenes no se pueden usar sin
par metros. Por ejemplo, si crea un programa que haga tres
TYPE de los par metros asociados al fichero batch y luego s¢lo
recibe dos, el programa generar un error, pues no se puede
utilizar la orden TYPE sin par metros.
Adem s del par metro %NUMERO, el DOS admite par metros
con nombre, entendidos como variables de entorno para archivos
batch. Cuando el sistema encuentra un par metro con nombre
-encerrado entre dos signos de tanto por ciento: %NOMBRE%-,
explora el entorno buscando una variable con ese mismo nombre.
El comando del DOS, SET, asigna datos a la variable de
entorno. Pongamos un caso: si queremos asignar un valor a la
variable %FILE%, como por ejemplo, el contenido del
AUTOEXEC.BAT, debemos escribir lo siguiente: SET
FILE=AUTOEXEC.BAT. Si queremos comprobar el uso de las
variables de entorno, simplemente escribiremos SET sin
argumentos. El DOS presentar la lista de variables de entorno
en ese momento:
C>SET
COMSPEC=C:\DOS\COMMAND.COM
PATH=C:\DOS
FILE=AUTOEXEC.BAT
Por el contrario, para eliminar el valor de una variable
de entorno, basta con emplear el comando SET de esta forma:
SET FILE=
Cuando el DOS encuentra una variable de entorno, recorre
el entorno en busca de ‚sta. Si no existe, asigna a %NOMBRE%
una cadena vac¡a. En este caso, el sistema operativo crea el
archivo en el directorio actual. Si existe, desaparece el
valor anterior y permanece el nuevo que se le pueda dar.
Con todo lo aprendido, veamos un ejemplo.
@ECHO OFF
REM EXTRAE.BAT
SET EXTRAE=
FOR %%A IN (/%1) DO IF "%EXTRAE%"=="" SET EXTRAE=%%A
ECHO %EXTRAE%
El programa EXTRAE.BAT, como su propio nombre indica,
extrae la primera letra de cualquier palabra que le hayamos
pasado como par metro al programa, visualizando el resultado
en la pantalla. Para adentrarnos en su explicaci¢n, si no se
tiene muy claro c¢mo funcionan las ¢rdenes IF y FOR, habr de
saltarse el siguiente p rrafo, continuar con la lectura y
volver luego a estas explicaciones cuando los conceptos hayan
sido esclarecidos.
P gina 10
La primera l¡nea despu‚s de ECHO borra la variable de
entorno si la hubiese. F¡jese en la barra espaciadora del
conjunto entre par‚ntesis. No es ning£n separador; se trata de
una caracter¡stica no documentada del MS-DOS. Con ella se
logra que en la primera pasada del FOR, la variable %%A tome
el valor de la primera letra pasada como par metro, mientras
que en la segunda, se tome el valor del resto de las letras
del par metro. Es decir, la barra espaciadora separa el primer
car cter de una cadena del resto. En nuestro ejemplo, durante
la primera pasada, SET colocar la primera letra en la
variable de entorno, mientras que en la segunda -y como se ha
mencionado-, desaparece el valor anterior y permanece el
nuevo, que ser el resto de la cadena a visualizar con ECHO.
2.1.6 Orden CALL
Cuando se ejecuta un segundo archivo batch desde un
primer archivo batch, se debe llamar a este segundo con una
orden de llamada -COMMAND o CALL-. De lo contrario, el DOS
deja de ejecutar los comandos del primer archivo batch cuando
se ha completado la ejecuci¢n del primero.
Si se emplea DOS 3.3 o posterior se debe utilizar el
comando CALL -al que se le pueden a¤adir par metros desp£es
del archivo batch-.
@ECHO OFF
VER
VOL
CALL FORMATEA %1
FORMATEA.BAT es un archivna 12
archivo no existe contin£a la ejecuci¢n del archivo batch con
el siguiente comando. T‚ngase en cuenta que el DOS s¢lo admite
una orden v lida para cada l¡nea de un fichero por lotes. Si
quiere ejecutar dos o m s ¢rdenes, se han de agrupar ‚stas
detr s de una etiqueta y utilizar una orden 'GOTO :etiqueta'
detr s de la condici¢n. No obstante, si DOSKEY (programa de
MS-DOS 5.0 y superior) fue cargado (en el AUTOEXEC.BAT), puede
introducir varias ¢rdenes separ ndolas por el car cter ' '
(CTRL-T). El par metro NOT, si se coloca, invierte la
condici¢n.
La condici¢n 'IF [NOT] cadena1==cadena2 orden' comprueba
si dos cadenas de caracteres son id‚nticas; caso de que lo
sean, ejecuta el comando del DOS siguiente. La comparaci¢n de
las dos cadenas de caracteres se hace letra a letra. Las
cadenas han de coincidir exactamente, incluyendo may£sculas y
min£sculas (no importan los espacios en blanco).
Si no se especifican dos cadenas de caracteres, en la
l¡nea de comandos aparece un mensaje de error. Este error es
muy com£n cuando se comprueba un par metro del archivo batch:
IF %1==MES GOTO BALANCE
Si no se especifica un valor para el par metro %1, la
condici¢n comparar¡a una £nica cadena, pues %1 desaparece,
resultando un error de sintaxis. Para solucionarlo, basta con
colocar entre comillas las cadenas de caracteres:
IF "%1"=="MES" GOTO BALANCE
Por esta misma regla de tres, podemos decir que para
comprobar si se ha introducido un par metro o no, basta con
escribir en el fichero por lotes lo siguiente:
IF "%1"=="" orden
La condici¢n 'IF [NOT] ERRORLEVEL n£mero_c¢digo orden'
examina la situaci¢n de terminaci¢n de los comandos y contin£a
con el proceso de la condici¢n de acuerdo con los valores
obtenidos. La situaci¢n de terminaci¢n de algunos comandos se
basa en los c¢digos de salida generados por los comandos del
DOS. Normalmente, dichos c¢digos sirven para describir la
causa del error que ha provocado la finalizaci¢n del programa.
No obstante, s¢lo hay diez ¢rdenes est ndar del DOS que
devuelven c¢digos de salida para ser procesados con la orden
IF ERRORLEVEL.
Aqu¡ esta la tabla que resume los valores de situaci¢n de
salida y sus significados:
Comando Valor Significado
BACKUP 0 Realizada copia de seguridad
BACKUP 1 No existen archivos para copiar
BACKUP 2 Conflicto de ficheros compartidos
P gina 13
BACKUP 3 Abortado por el usuario con CTRL-C
BACKUP 4 Error fatal. Copia de seguridad incompleta
DISKCOMP 0 Comparaci¢n correcta
DISKCOMP 1 Comparaci¢n incorrecta (discos distintos)
DISKCOMP 2 Abortado por el usuario con CTRL-C
DISKCOMP 3 Error de lectura o escritura
DISKCOMP 4 Memoria insuficiente, unidad no v lida
DISKCOPY 0 Copia realizada con ‚xito
DISKCOPY 1 Error de lectura o escritura
DISKCOPY 2 Abortado por el usuario con CTRL-C
DISKCOPY 3 Imposible leer disco fuente o escribir
DISKCOPY 4 Memoria insuficiente, unidad no v lida
FORMAT 0 Formateo con ‚xito
FORMAT 3 Abortado por el usuario con CTRL-C
FORMAT 4 Error fatal. Operaci¢n incompleta
FORMAT 5 Respuesta N a ¨Formatear otro disco(S/N)?
GRAFTABL 0 Tabla de caracteres cargada correctamente
GRAFTABL 1 Se sustituy¢ la tabla previamente cargada
GRAFTABL 2 Error de fichero
GRAFTABL 3 Par metro incorrecto
GRAFTABL 4 Versi¢n del DOS incorrecta
REPLACE 0 Actualizaci¢n de fichero realizada
REPLACE 2 Ficheros origen no encontrados
REPLACE 3 Trayectoria no encontrada
REPLACE 5 Archivo destino s¢lo de lectura
REPLACE 8 Memoria insuficiente
REPLACE 11 Comando incorrecto
REPLACE 15 Unidad de disco no v lida
REPLACE 22 Versi¢n del DOS incorrecta
(no funciona para MS-DOS)
RESTORE 0 Ficheros restaurados correctamente
RESTORE 1 Ficheros a restaurar no encontrados
RESTORE 2 Conflicto debido a archivo compartido
(no funciona para MS-DOS)
RESTORE 3 Abortado por el usuario con CTRL-C
RESTORE 4 Error fatal. RESTORE incompleto
Pero es que el MS-DOS 5 proporciona, adem s, nuevos
c¢digos de salida para algunos comandos:
Comando Valor Significado
KEYB 0 Fichero de teclado cargado correctamente
KEYB 1 C¢digo de teclado incorrecto
KEYB 2 KEYBOARD.SYS no encontrado o incorrecto
KEYB 3 No se puede crear la tabla
KEYB 4 Error al comunicarse con dispositivo CON
KEYB 5 La p gina de c¢digos no ha sido preparada
KEYB 7 Versi¢n del DOS incorrecta
KEYB 8 Memoria insuficiente
SETVER 0 SETVER ejecutado correctamente
SETVER 1 Par metro no v lido
SETVER 2 Nombre de archivo incorrecto
SETVER 3 Memoria insuficiente
SETVER 4 N£mero de versi¢n incorrecto
SETVER 5 Entrada no hallada en la lista de SETVER
P gina 14
SETVER 6 No se encuentra el archivo SETVER.EXE
SETVER 7 Unidad incorrecta
SETVER 8 Demasiados par metros
SETVER 9 Falta alg£n par metro
SETVER 10 Error al leer la tabla de SETVER.EXE
SETVER 11 La tabla de SETVER es incorrecta
SETVER 12 SETVER no soporta una lista de programas
SETVER 13 Espacio insuficiente en la lista
SETVER 14 Error de escritura
XCOPY 0 Copia realizada correctamente
XCOPY 1 No hay ficheros para copiar
XCOPY 2 Abortado por el usuario con CTRL-C
XCOPY 4 Error de inicializaci¢n
XCOPY 5 Error al escribir los ficheros (INT 24)
Mientras que MS-DOS 6 utiliza los siguientes c¢digos de
error.
Comando Valor Significado
CHOICE 0 Interrumpido por el usuario con CTRL-C.
CHOICE 1 Aceptaci¢n del primer car cter dado
despu‚s del par metro C:teclas
CHOICE 2 Aceptaci¢n del segundo car cter dado
despu‚s del par metro C:teclas, y as¡
sucesivamente
CHOICE 255 Error general
DEFRAG 0 Desfragmentaci¢n correcta
DEFRAG 1 Error interno de DEFRAG
DEFRAG 2 Disco lleno
DEFRAG 3 Desfragmentaci¢n abortada por usuario
DEFRAG 4 Error general
DEFRAG 5 Error de lectura en cluster
DEFRAG 6 Error de escritura en cluster
DEFRAG 7 Error al modificar la FAT
DEFRAG 8 Error de memoria
DEFRAG 9 No hay memoria suficiente
DELTREE 0 Eliminaci¢n de ficheros correcta
EMM386 EMMXXXX0 Soporte de memoria expandida activado
(este c¢digo constituye una excepci¢n, al
tratarse en realidad de una cadena)
Examinemos unos ejemplos de utilidad. El primero,
DESARC.BAT desencripta los ficheros con extensi¢n .LZH (del
popular programa compactador de dominio p£blico).
FOR %%A IN (*.LZH) DO LHA U %%A
El segundo, ORDENA.BAT, emplea la orden IF EXIST para
borrar un archivo donde se guardan los datos de los ficheros
con extensi¢n que especifiquemos como par metro de ORDENA.BAT.
Despu‚s, el programa usa ECHO para direccionar y adicionar con
'>>' la lista de pantalla al archivo ORDENA.DAT. Una vez
creado el archivo, SORT ordena su contenido, presentando los
nombres en pantalla. Por £ltimo, se borra el archivo .DAT que
ya no se necesita.
@ECHO OFF
IF EXIST ORDENA.DAT DEL ORDENA.DAT
FOR %%A IN (%1) DO ECHO %%A >> ORDENA.DAT
SORT < ORDENA.DAT
DEL ORDENA.DAT
***********************************************
* > Redirecci¢n de salida para un archivo *
***********************************************
* >> Adici¢n de un fichero *
***********************************************
P gina 18
* < Redirecci¢n de entrada para un archivo *
***********************************************
El tercero, SALIR.BAT, sale de un supuesto men£ creado
por un fichero por lotes y presenta un mensaje por pantalla.
En cualquier caso, el comando FOR se ejecuta tantas veces como
elementos hay en conjunto.
@ECHO OFF
CLS
FOR %%A IN (0 1 2 3 4 5 6 7 8 9 10 11) DO ECHO.
ECHO GRACIAS POR TRABAJAR CON NUESTRO PROGRAMA
FOR %%A IN (0 1 2 3 4 5 6 7 8 9 10) DO ECHO.
Como puede verse a trav‚s de estos ejemplos, el comando
FOR a¤ade una enorme flexibilidad a los archivos batch, pero
lo que muchos no saben es que tambi‚n puede ejecutarse desde
la l¡nea de comandos, sin necesidad de crear una l¡nea para un
fichero por lotes. En este caso, las variables han de
escribirse con un s¢lo car cter '%', es decir %LETRA.
P gina 19
Cap¡tulo 3
NUEVOS COMANDOS INTERACTIVOS PARA LOS FICHEROS POR LOTES
--------------------------------------------------------
3.1 Norton, el rey Midas de la inform tica, proporciona un
nuevo comando
Podemos extraer como una primera conclusi¢n que: los
archivos batch son herramientas muy potentes para mejorar la
eficiencia del trabajo con DOS. Desgraciadamente, el DOS no
proporciona los comandos necesarios para trabajar en tiempo
real, bas ndose en la entrada desde el teclado. Esta omisi¢n
limita seriamente las posibilidades de los ficheros por lotes.
No obstante, podemos hacer uso de programas externos, como
Ampliar Batch, de las Utilidades Norton, donde se a¤aden
nuevas posibilidades. A pesar de esto, como se ver m s
adelante, el DOS guarda algunos trucos para realizar algunos
de los trabajos que se esperan de estas utilidades.
El comando AB (Ampliar Batch) de las Utilidades Norton
(BA en la versi¢n americana) obtiene nuevos modos de
funcionamiento para los ficheros por lotes. Dado que estas
utilidades son muy conocidas por los usuarios, conviene
estudiar AB con detalle, a modo de ejemplo de expansi¢n con
otros comandos externos del DOS.
AB hace uso de subcomandos y par metros para estos
subcomandos. As¡, el subcomando AB ?, ofrece pantallas de
ayuda con texto acerca del modo de trabajo de Ampliar Batch.
Los subcomandos de AB son: PREGUNTA, SONIDO, RECUADRO,
CLS, PAUSA, GOTO, IMPCAR, FILACOL, VENTANA y AP. Todos estos
subcomandos manejan, a su vez, una serie de par metros que
ahora conoceremos.
Cabe recordar que para poder utilizar el comando AB desde
cualquier directorio, aparte de la instalaci¢n de las
Utilidades Norton, se ha de a¤adir el nombre del directorio en
el que se encuentran las utilidades a la instrucci¢n PATH del
AUTOEXEC.BAT.
Por cierto que si queremos a¤adir un PATH al archivo
AUTOEXEC.BAT desde un fichero por lotes de instalaci¢n, s¢lo
hay que combinar un fichero con otro. Por ejemplo, el programa
INSTALA.BAT a¤ade una l¡nea al AUTOEXEC.BAT.
@ECHO OFF
CLS
REM Programa INSTALA.BAT
ECHO ¨INSTALA [unidad origen:] [unidad destino:]?
ECHO Si no es correcto pulse CTRL-C
PAUSE > NUL
%2
P gina 20
CD %2\
COPY %2\AUTOEXEC.BAT+%1\AYUDA %2\AUTOEXEC.BAT
MD INSTALL
CD INSTALL
COPY %1\*.*
El fichero AYUDA contendr¡a lo siguiente:
PATH=C:\NORTON
El programa INSTALA.BAT env¡a una pregunta acerca de los
par metros dados a INSTALA. El fichero por lotes detiene el
proceso y direcciona el mensaje de salida de la orden PAUSE a
un dispositivo nulo. El par metro %2 obliga al programa a
activar esa unidad, mientras que CHDIR (CD) cambia el
directorio activo al directorio ra¡z. La orden COPY utilizada
de esta forma, combina el fichero de texto AYUDA -el cual
contiene una l¡nea PATH- con el AUTOEXEC.BAT, a¤adiendo esta
£ltima l¡nea al final. Las otras tres ¢rdenes abren un nuevo
directorio y copian el programa que requiere de este PATH al
directorio especificado.
1. El subcomando PREGUNTA hace una pregunta y espera una
respuesta. Cuando se llama al comando PREGUNTA aparece el
texto de la pregunta con varias opciones. Se responde a
PREGUNTA pulsando una tecla de la lista de contestaciones.
Despu‚s de seleccionar una de las teclas de la lista, PREGUNTA
devuelve la informaci¢n sobre la tecla elegida con un
ERRORLEVEL. As¡, la primera opci¢n corresponder¡a a ERRORLEVEL
1, la segunda a ERRORLEVEL 2, la tercera a ERRORLEVEL 3, etc.
El programa batch puede bifurcarse a diferentes etiquetas,
seg£n el ERRORLEVEL indicado.
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
:WP
CD\WP51
WP
GOTO SALIR
:DBASE
CD\DBASE
DBASE
GOTO SALIR
:SALIR
La sintaxis de este subcomando es la siguiente:
AB PREGUNTA MENSAJE [,TECLAS] [DEFECTO=TECLA] [ESPERA=N]
[AJUSTE=N] [COLOR]
Donde TECLAS corresponder¡a a las iniciales de la lista
de opciones, DEFECTO=TECLA a la tecla de respuesta, ESPERA=N
al tiempo en segundos para esperar antes de tomar como
respuesta la tecla, AJUSTE=N al ajuste del valor devuelto por
P gina 21
ERRORLEVEL (hasta un m ximo de 254), y COLOR al par metro que
colorea el texto del mensaje.
La sintaxis de todas las ¢rdenes se encuentran
convenientemente detalladas en la gu¡a del usuario de las
Utilidades Norton. Las explicaciones aqu¡ referidas han de
tomarse como ejemplo de las posibilidades que abren otros
comandos externos del DOS.
Existe otro m‚todo para formular preguntas al usuado el controlador de
dispositivo. Para remediarlo, puede arrancar un controlador
ANSI.COM. El ANSI ejecutable no es tan dif¡cil de encontrar.
Una primera versi¢n producida por Jordi Mas y este servidor ha
sido incluida en la recopilaci¢n de utilidades adjunta al
libro.
Se pueden emplear distintos colores, como un fondo de
color, o atributos como v¡deo inverso o texto parpadeante con
este subcomando. Tambi‚n se puede utilizar AP junto con SONIDO
para producir efectos interesantes. Los resultados obtenidos
var¡an en funci¢n de la pantalla gr fica que tengamos; habr
que experimentar para comprobar las mejores combinaciones. Los
programadores de ficheros por lotes habr n de probar en
distintos ordenadores antes de decidirse por incluir una
pantalla as¡ creada en su programa.
P gina 23
La sintaxis del subcomando es la siguiente:
AB AP [INTENSIDAD] [PRIMER-PLANO] [EN FONDO] [/N] [/CLS]
Los valores para intensidad son Brillo, Negrita o
Parpadeo. Los valores de primer-plano y fondo son Blanco,
Azul, Negro, Rojo, Verde, Magenta, Cyan y Amarillo. Todas
estas opciones pueden abreviarse con las tres primeras letras.
Puede prescindirse de todas las opciones y escribirse unos
valores generales, que son: Normal, Inverso y Subrayado.
El par metro /N no var¡a el color del borde, mientras que
el par metro /CLS borra la pantalla despu‚s de cambiar los
atributos de color.
Para las versiones americanas de las Utilidades Norton,
consulte el manual de Symantec donde encontrar la
correspondencia de los subcomandos en castellano con los
similares en lengua inglesa.
3.2 El an¢nino LETRA.COM
Como se est viendo, la capacidad de funcionamiento en
modo interactivo de los ficheros batch, es bastante potente,
desmintiendo las palabras de aquellos que, sin entender
demasiado, pretenden desacreditar el potencial de los ficheros
por lotes. A ello, pueden achacar que se trata de programas
donde, una vez comenzado su proceso, es imposible interrumpir
su funcionamiento. Bueno, ya se ha visto que esto no es as¡.
Comandos como AB PREGUNTA de las Utilidades Norton requiere de
informaci¢n externa, as¡ como hay trucos con el DOS 5 y 6 o el
DEBUG que permiten esto mismo. Con todo, existe un programa de
dominio p£blico, incluido en las UTILIDADES+2, que utiliza el
concepto de ERRORLEVEL para crear ficheros interactivos. El
autor de este programa es desconocido. Se trata de LETRA.COM.
La £nica informaci¢n disponible sobre este programa, es
el ejemplo que viene a continuaci¢n.
1 @ECHO OFF
2 ECHO PULSE (A-C) PARA VER LOS MENSAJES O 'S' PARA SALIR
3 LETRA ABCS
4 REM Los argumentos de LETRA (por ejemplo 'ABCS' deben darse
5 REM en may£sculas.
6 REM N¢tese que el usuario puede introducir tanto may£sculas
7 REM como min£sculas en su respuesta.
8 IF ERRORLEVEL 19 GOTO FIN
9 IF ERRORLEVEL 3 GOTO MENSAJEC
10 IF ERRORLEVEL 2 GOTO MENSAJEB
11 IF ERRORLEVEL 1 GOTO MENSAJEA
12 REM Obs‚rvese que ERRORLEVEL se define de acuerdo con el
valor
13 REM ASCII del car cter en may£sculas menos 64 (por ejemplo
14 REM 'A'= (65-64) = 1)
P gina 24
15 :MENSAJEA
16 ECHO ^G
17 ECHO Se ha pulsado la tecla A
18 GOTO FIN
19 :MENSAJEB
20 ECHO ^G
21 ECHO Se ha pulsado la tecla B
22 GOTO FIN
23 :MENSAJEC
24 ECHO ^G
25 ECHO Se ha pulsado la tecla C
26 :FIN
F¡jese que la l¡nea "LETRA ABCS" define las respuestas
permitidas. Cualquier intento de teclear otra letra congela el
fichero hasta obtener la respuesta definida. El esquema de
ERRORLEVEL consiste en restar 64 del valor ASCII de cada
respuesta permitida. Como se cit¢ en el apartado
correspondiente, ERRORLEVEL analiza el n£mero devuelto mayor,
desde el m s alto hasta el m s bajo. Combinando los errores
devueltos por LETRA.COM con las bifurcaciones, se pueden
desarrollar ficheros interactivos. En el ejemplo, cuando se
pulsa la tecla correcta -que bien pudiera emitirse un mensaje
con ECHO para dar a entender cu les son las opciones de
respuesta- se transfiere el proceso.
En otro ejemplo imaginario, una respuesta S devolver¡a 19
como ERRORLEVEL (83-64) y una respuesta N un ERRORLEVEL 14
(78-64). Piense en sus aplicaciones. N¢tese, por £ltimo, que
la resta se hace del valor ASCII de las may£sculas.
3.3 El otro DOS
El sistema operativo DR DOS 6, de Digital Research,
utilizaba dos ¢rdenes en los ficheros por lotes, no
contempladas en MS-DOS. Puede valerse de ellas si dispone del
sistema operativo o copi ndolas directamente al sistema
operativo de Microsoft. Las ¢rdenes son: GOSUB y SWITCH.
GOSUB es similar a GOTO. Ambos se utilizan para
transferir el control de la ejecuci¢n. La £nica diferencia
estriba en que GOSUB debe incluir el comando RETURN para que
el procesamiento contin£e en la l¡nea que sigue a GOSUB. Es
similar en cuanto a caracter¡sticas a la orden de Basic.
Veamos un ejemplo para a¤adir al AUTOEXEC.BAT:
IF EXIST *.BAK GOSUB BORRABAK
GOTO SIGUE
:BORRABAK
DEL *.BAK
RETURN
:SIGUE
El archivo AUTOEXEC.BAT comprueba en el directorio ra¡z
si existe alguna copia de seguridad. Caso de que encontrase
P gina 25
alguna, el procesamiento saltar¡a a la etiqueta :BORRABAK y
borrar¡a estas copias de seguridad. El comando RETURN
devolver¡a el control a la l¡nea siguiente que pasar¡a a la
etiqueta :SIGUE, donde se continuar¡an las ¢rdenes que uno
desee del AUTOEXEC.
SWITCH es muy parecido a GOSUB, salvo que SWITCH permite
conmutar entre distintas reas de trabajo del fichero por
lotes. La orden es similar en cuanto a caracter¡sticas a la de
QBASIC/ QuickBASIC y a la de cualquier compilador de C. Veamos
c¢mo act£a a trav‚s de un ejemplo:
ECHO 1 = WORDPERFECT
ECHO 2 = dBASE
ECHO 3 = LOTUS 1-2-3
SWITCH 1, 2, 3
GOTO FIN
:1
CD\WP51
WP
RETURN
:2
CD\DBASE
DBASE
RETURN
:3
CD\LOTUS
LOTUS
RETURN
:FIN
Como puede ver, al principio del fichero se presentan
tres opciones -que pueden ser tantas como uno quiera, hasta un
total de nueve etiquetas-, visualizadas en pantalla merced al
comando ECHO. SWITCH espera a que seleccione entre 1, 2 ¢ 3.
Una vez realizada la elecci¢n, SWITCH le lleva a la etiqueta
adecuada, se ejecutan los comandos de ‚sta y RETURN devuelve
el control de la ejecuci¢n a la sentencia que sigue a SWITCH,
en este caso un GOTO a la etiqueta FIN. Tambi‚n se podr¡a
haber enviado el control a una etiqueta al principio del
programa, con lo que ‚ste entrar¡a en un bucle infinito que
s¢lo permitir¡a la ejecuci¢n de los programas indicados en las
etiquetas.
Despu‚s de DR DOS 6, Novell absorbi¢ el sistema operativo
de Digital Research y lanz¢ Novell DOS 7, que compatibiliza
las mismas ¢rdenes interactivas de su antecesor. Si quiere
saber m s sobre ‚ste y otros sistemas operativos de reciente
aparici¢n, rem¡tasna de las posiciones de un array. El
programa copia la cadena pasada como argumento o par metro al
fichero que se mencion¢ como primer par metro. 'strcat'
concatena la cadena batch, d ndole esta extensi¢n al nombre
del fichero. Se crea un fichero y el bucle 'for' escribe cada
par metro en una l¡nea del fichero batch, con la longitud
precisa de cada cadena ('strlen'). Despu‚s de pasados todos
los par metros, el programa cierra el fichero.
Los que utilicen otro compilador, como Borland C++,
habr n de obviar los mensajes fat¡dicos que se¤alan el tipo de
dato del valor devuelto por la funci¢n. El programa se ejecuta
correctamente, aunque con unas cuantas correcciones y
variaciones se podr¡a mejorar much¡simo. Lo dejo por cuenta
del lector y usuario avanzado con conocimientos de C.
P gina 28
Cap¡tulo 4
PROGRAMACION CON ANSI.SYS Y SECUENCIAS DE ESCAPE
------------------------------------------------
4.1 ANSI.SYS es un controlador de dispositivo
ANSI.SYS es un controlador de dispositivo formado por un
conjunto de rutinas de programaci¢n, que se encargan de
supervisar la entrada desde el teclado y la salida por la
pantalla. Cada vez que se transfieren datos por esta entrada o
salida est ndar, las rutinas del controlador de dispositivo
analizan los datos buscando la presencia de una secuencia de
caracteres especial identificadora de las ¢rdenes ANSI. Hay
que tener en cuenta que todos los caracteres de entrada y
salida son comprobados por ANSI.SYS. As¡, cuando encuentra
esta secuencia de caracteres especial, se ejecutar la orden
indicada en dicha secuencia, siempre y cuando tengamos cargado
el controlador de dispositivo en la memoria. Para resumirlo
brevemente, ANSI.SYS es un filtro superpuesto a la entrada y
salida de teclado y pantalla que solamente intervendr cuando
aparezca una secuencia de caracteres determinada que ‚ste
pueda reconocer. Si no existe esta secuencia, el controlador
filtra los caracteres y cede el control a otras rutinas que
gestionan el teclado y la pantalla habitual.
Como se puede ver, ANSI.SYS es un programa que incrementa
la capacidad del teclado y y la pantalla del ordenador. La
extensi¢n .SYS quiere decir que el archivo pertenece al
sistema operativo. Para cargarlo en memoria, debe insertarse
una l¡nea en el CONFIG.SYS, que es el archivo que emplea el
DOS cada vez que el ordenador se arranca para configurar la
memoria. La l¡nea debe ser:
DEVICE=ANSI.SYS
O en todo caso, con la v¡a completa de acceso si el DOS
se encuentra en un PATH diferente del ra¡z. Tambi‚n es posible
cargar el controlador de dispositivo en la memoria superior
(en un bloque UMB), ahorrando memoria convencional, con la
orden DEVICEHIGH=.
Si a la l¡nea ANSI.SYS le a¤adimos el par metro /K, se
fuerza a que el controlador use las funciones del teclado
normal (84 teclas), aunque el sistema tenga presente un
teclado ampliado (101 teclas). El par metro /K proporciona
compatibilidad con los programas que no soportan las funciones
del teclado ampliado. Si se usa este par metro debe
introducirse adem s en el CONFIG.SYS la orden SWITCHES = /K.
El par metro /X a¤adido a la l¡nea ANSI.SYS permite que las
teclas repetidas de los teclados ampliados puedan ser
reasignadas independientemente (este tema lo veremos despu‚s
con m s detalle).
P gina 29
Una vez activado ANSI.SYS se puede realizar cualquier
operaci¢n que tenga que ver con la pantalla y el teclado, como
mover el cursor, borrar la pantalla, salvar y restaurar la
posici¢n del cursor, activar varios modos de v¡deo, modificar
los colores, emitir un parpadeo y hasta remapear todo el
teclado asignando a cada tecla un valor diferente. He aqu¡ la
importancia del controlador de dispositivo, bien usado, para
la programaci¢n de los ficheros por lotes.
Recuerde que todas estas ventajas s¢lo ser n v lidas,
siempre y cuando se tenga instalado ANSI.SYS en el CONFIG.SYS.
As¡ que ahora viene una cuesti¢n de suma importancia. Como
programador de ficheros batch ¨cu ndo estoy seguro de que el
usuario al que le haya vendido mi programa tenga instalado el
controlador de dispositivo? La respuesta es *que usted no lo
sabe! Pero todo tiene soluci¢n. Mi amigo Jordi Mas y un
servidor creamos un programa llamado EMUANSI.COM que ser¡a el
primero en ejecutarse en su fichero por lotes antes de hacer
uso de las secuencias de escape. Si esto es as¡, no debe
preocuparle que est‚ o no instalado el controlador de
dispositivo original. Esta herramienta se encuentra en las
UTILIDADES+2.
Las ¢rdenes de ANSI.SYS se identifican mediante las
llamadas secuencias de caracteres (secuencias de escape).
Estas secuencias de caracteres se env¡an mediante dos m‚todos:
empleando el comando ECHO o el comando PROMPT. La orden TYPE
seguido de un fichero de texto tambi‚n acepta ¢rdenes ANSI
para desarrollos m s complejos.
Una secuencia de escape es una combinaci¢n £nica de
caracteres que empieza con el car cter de escape ASCII 27. El
car cter de escape no se introduce escribiendo las letra E, S
y C, sino introduciendo el c¢digo ASCII 27 que aparece en
pantalla simbolizado por una flecha a la izquierda ( ). Hace
falta un segundo car cter, un simple corchete ([), cuyo valor
es ASCII 91.
4.2 Un artista del color en la pantalla
Para comenzar viendo el funcionamiento de ANSI.SYS,
establezcamos los colores de una pantalla. La secuencia de
escape que establece los colores es
ESC[colorm
donde ESC es el car cter de escape ASCII y color, un
valor de los siguientes:
[Valor] [Color]
0 Letras blancas sobre fondo negro.
1 Alta intensidad o negrita. Azul para EGA color.
2 Verde para EGA color.
3 Cian para EGA color.
P gina 30
4 Subrayado (monitor monocromo). Azul sobre negro
(monitor color). Rojo para EGA color.
5 Parpadeo de las letras. Magenta para EGA color.
6 Texto parpadeante (r pido). Marr¢n para EGA color.
7 V¡deo inverso. Blanco para EGA color.
8 Invisible (negro sobre negro). Gris para EGA color.
9 Azul claro para EGA color. Subrayado en alta
intensidad para EGA monocromo.
10 Verde claro para EGA color. Alta intensidad para EGA
monocromo.
11 Cian claro para EGA color. Alta intensidad para EGA
monocromo.
12 Rojo claro para EGA color. Alta intensidad para EGA
monocromo.
13 Magenta (granate) claro para EGA color. Alta
intensidad para EGA monocromo.
14 Amarillo para EGA color. Alta intensidad para EGA
monocromo.
15 Blanco en alta intensidad para EGA color. Alta
intensidad para EGA monocromo.
16 Negro parpadeante para EGA color. Negro parpadeante,
si el fondo es 7, para EGA monocromo.
17 0;133 0;135 0;137 0;139
F12 0;134 0;136 0;138 0;140
Ins * 224;82 224;82 224;146 224;162
Inicio * 224;71 224;71 224;119 224;151
ReP g * 224;73 224;73 224;132 224;153
Supr * 224;83 224;83 224;147 224;163
Fin * 224;79 224;79 224;117 224;159
AvP g * 224;81 224;81 224;118 224;161
Cursor arriba* 224;72 224;72 224;141 224;152
Cursor izqda.* 224;75 224;75 224;115 224;155
Cursor abajo * 224;80 224;80 224;145 224;160
Cursor dcha. * 224;77 224;77 224;116 224;157
Inicio 0;71 55 0;119 -
Cursor arriba 0;72 56 0;141 -
ReP g 0;73 57 0;132 -
Cursor izqda. 0;75 52 0;115 -
Cursor dcha. 0;77 54 0;116 -
Fin 0;79 49 0;117 -
Cursor abajo 0;80 50 0;145 -
AvP g 0;81 51 0;118 -
Ins 0;82 48 0;146 -
Supr 0;83 46 0;147 -
ImprPant - - 0;114 -
A 97 65 1 0;30
B 98 66 2 0;48
C 99 67 3 0;46
D 100 68 4 0;32
E 101 69 5 0;18
F 102 70 6 0;33
G 103 71 7 0;34
H 104 72 8 0;35
I 105 73 9 0;23
J 106 74 10 0;36
K 107 75 11 0;37
L 108 76 12 0;38
M 109 77 13 0;50
N 110 78 14 0;49
O 111 79 15 0;24
P 112 80 16 0;25
P gina 37
Q 113 81 17 0;16
R 114 82 18 0;19
S 115 83 19 0;31
T 116 84 20 0;20
U 117 85 21 0;22
V 118 86 22 0;47
W 119 87 23 0;17
X 120 88 24 0;45
Y 121 89 25 0;21
Z 122 90 26 0;44
1 49 33 - 0;120
2 50 64 - 0;121
3 51 35 - 0;122
4 52 36 - 0;123
5 53 37 - 0;124
6 54 94 - 0;125
7 55 38 - 0;126
8 56 42 - 0;127
9 57 40 - 0;128
0 58 41 - 0;129
Tecla ¦/§ 167 166 28 0;41
Tecla ?/' 39 63 31 0;130
Tecla ?/* 173 168 - 0;131
Tecla ^/`/[ 96 94 27 0;26
Tecla */+/] 43 42 29 0;27
Tecla /'/{ 39 249 - 0;40
Tecla ‡/} 128 135 - 0;43
Tecla ;/, 44 59 - 0;51
Tecla :/. 46 58 OMPT ha de usar otro m‚todo para generarlo. Quien genera el
c¢digo Intro es el par metro $_ dentro de la cadena valor.
Siguiendo el ejemplo anterior, ‚ste quedar¡a de la siguiente
forma:
PROMPT $E[0;68;"|MORE$_"p
- Puede redefinir alguna tecla con la orden externa
"HELP" o con la cadena "/?" seguida de un Intro. De esta forma
s¢lo tendr que pulsar esta tecla antes o despu‚s de una orden
del DOS (seg£n utilice el HELP o el interrogante) para obtener
la pantalla de ayuda de alg£n comando.
- Las teclas m s f ciles de redefinir son las teclas de
funci¢n, pero recuerde que hay algunas teclas que se utilizan
para generar un car cter o que son usadas por DOSKEY. Por
tanto, no reasigne las teclas F6, F7, F8 y F9 y ALT-F9, adem s
de las teclas que tienen un significado como CTRL-C o CTRL-Z.
Vayamos ahora con la siguiente orden para
activar/desactivar la reasignaci¢n de teclas repetidas en los
teclados ampliados (101 teclas).
La orden 'q' de ANSI.SYS sirve para redefinir estas
teclas repetidas. Se puede hacer de dos formas:
Esc[0q
Esc[1q
Empecemos por ver c¢mo trabaja el valor m s alto. Si activamos Esc[1q nos permite reasignar independientemente las teclas repetidas del teclado ampliado. Si no activamos esta orden, entonces cuando redefinamos una tecla con otro valor (seg£n el m‚todo explicado con anterioridad, usando la orden 'p'), al cambiar el valor de una tecla tambi‚n se cambiar la correspondiente en el teclado ampliado (si es que existe).
Si activamos Esc[1p, dos teclas iguales (en el teclado normal y teclado ampliado) pueden tener dos valores diferentes. Sin embargo, para el perfecto funcionamiento de esta orden conviene tener en cuenta lo siguiente:
- Si configura ANSI.SYS en el fichero CONFIG.SYS con el par metro /K no funciona la orden 'q'. El par metro /X tiene la misma funci¢n que la orden Esc[1p. Decida cu l de las dos formas es la que quiere utilizar. Por defecto, el controlador ANSI.SYS carga desactivada la orden de reasignaci¢n de teclas ampliadas.
- Hay que tener en cuenta que el controlador ANSI.SYS guarda un valor asignado, pese a que no tenga efecto si la redefinicion del teclado ampliado no fue activada. Suponga un ejemplo:
Esc[224;71;"valor de Inicio en teclado ampliado"p
Esta orden no tendr efecto como nuevo valor de la tecla Inicio del teclado ampliado si no est activada la reasignaciion del teclado ampliado, valga la redundancia. Esto significa que cuando se active Esc[1q se activar el nuevo valor sin tener que repetir la secuencia.
La orden Esc[0q es muy sencilla de entender. Desactiva la reasignaci¢n de los valores dados para los teclados ampliados.
4.5 La pantalla muestra sus atributos con otras ¢rdenes
Como se ha visto, las ordenes PROMPT y ECHO permiten generar ¢rdenes ANSI de formas diferentes. PROMPT utiliza el metacar cter $E que indica el car cter de escape ASCII. ECHO utiliza el car cter ESC (ASCII 27) representado en pantalla por una flecha dirigida hacia la izquierda (<-). Las ordenes de ANSI.SYS se identifican mediante una secuencia de caracteres que se reconoce por sus dos primeros bytes. El primer byte sera el carácter de la secuencia de escape y el segundo, un simple corchete izquierdo ([), con valor ASCII 91.
Hasta este punto, queda claro como generar ordenes ANSI con lo aprendido, pero existe otro método con la orden TYPE
del DOS. La orden TYPE visualiza ficheros usando la salida estandar (el monitor CON). Por tanto, si se crea un fichero de texto con el código ANSI Esc[2J y luego se lee mediante la orden TYPE también se borra la pantalla.
El metodo para escribir ordenes TYPE es el descrito para la orden ECHO. Para introducir el carecter de escape puede
hacerlo con la combinaci¢n ALT-27 del teclado num‚rico, o bien pulsando CTRL-P y luego la tecla ESC desde el editor EDIT del DOS.
Ejecutada una orden ANSI ‚sta se generar , si bien el indicador del PROMPT se habr desplazado una fila hacia abajo.
Para evitar esto (un retorno de carro, el resultado de pulsar una vez Intro) conviene eliminarlo introduciendo el c¢digo de fin de fichero (el car cter CTRL-Z). De esta forma, todo lo demas no se tiene en cuenta. Para introducir este c¢digo desde el editor EDIT del DOS, pulse CTRL-P y luego CTRL-Z.
El s¡mbolo que aparecer en pantalla ser el de una flecha hacia la derecha (->).



