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..........................................20
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
/ y
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...........................................89
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 algúnas 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 pagina tras pagina, 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 basico; es cuestión de hacer pruebas con su sistema operativo, comprobando en la practica que hace y que‚ 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. Dispondre de todo lo necesario para crear programas con menús, graficos, 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
Cómo utilizar este libro
------------------------
Este libro trata de los ficheros batcor cien la potencia de los ficheros batch.
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 grafica.
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 mas 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 elmensaje 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:
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 esta la orden mas frecuente de un archivo AUTOEXEC.BAT. No obstante,hay usuarios que se complican mucho mas el PROMPT e incluso 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:
Metacaracter Texto asociado al mismo
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:
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 valida 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 parametro adecuado. Cuando esto sucede, el primer PROMPT restablece el 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 algúnas ordenes, redireccionando la salida a un dispositivo nulo, pero existen algúnas ó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, sabiendolo usar, puede sernos de utilidad en algúnas 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 mas aclaraciones.
[Parametros] [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 caracter %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 mas claro, si el primer par metro de un fichero por lotes es C:\NORTON, para la siguiente orden:
... obtendríamos el siguiente mensaje:
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 este. Podemos interrumpir la ejecución de un archivo con la secuencia Control-C (F6). Veamos un ejemplo:
Cuando ejecute el programa, este 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, presentare este 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.
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:
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 (con o sin trayectoria) del archivo batch.
Si crea un archivo por lotes que haga uso de tres par metros, piense que algúnas ó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.
Ademas 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:
Por el contrario, para eliminar el valor de una variable de entorno, basta con emplear el comando SET de esta forma:
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.
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, habra de saltarse el siguiente párrafo, continuar con la lectura y volver luego a estas explicaciones cuando los conceptos hayan sido esclarecidos.
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 parentesis. 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 parametro. 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 después del archivo batch-.
FORMATEA.BAT es un archivna 12 archivo no existe continua la ejecución del archivo batch con el siguiente comando. T‚ngase en cuenta que el DOS solo 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 estas detras 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 ordenes separando las por el caracter ' ' (CTRL-T). El parametro NOT, si se coloca, invierte la condición.
La condición 'IF [NOT] cadena1==cadena2 orden' comprueba si dos cadenas de caracteres son identicas; 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 comun cuando se comprueba un par metro del archivo batch:
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:
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:
La condición 'IF [NOT] ERRORLEVEL número_código orden' examina la situación de terminación de los comandos y continua con el proceso de la condición de acuerdo con los valores obtenidos. La situación de terminación de algúnos 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, solo hay diez ordenes estandar del DOS que devuelven codigos 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
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, ademas, nuevos codigos de salida para algúnos 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
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 parametro 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 publico).
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.
***********************************************
* > Redirección de salida para un archivo *
***********************************************
* >> Adición de un fichero *
***********************************************
* < 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.
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 caracter '%', es decir %LETRA.
NUEVOS COMANDOS INTERACTIVOS PARA LOS FICHEROS POR LOTES
--------------------------------------------------------
3.1 Norton, el rey Midas de la informatica, 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 mas adelante, el DOS guarda algúnos trucos para realizar algúnos 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 expansion 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, solo hay que combinar un fichero con otro. Por ejemplo, el programa INSTALA.BAT a¤ade una línea al AUTOEXEC.BAT.
El fichero AYUDA contendría lo siguiente:
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 ultima 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
BASE
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 ERRORLEVEL (hasta un m ximo de 254), y COLOR al par metro que colorea el texto del mensaje.
La sintaxis de todas las ordenes 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. Tambien se puede utilizar AP junto con SONIDO para producir efectos interesantes. Los resultados obtenidos varían en funcion de la pantalla gr fica que tengamos; habra que experimentar para comprobar las mejores combinaciones. Los programadores de ficheros por lotes habran de probar en distintos ordenadores antes de decidirse por incluir una pantalla así creada en su programa.
La sintaxis del subcomando es la siguiente:
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 anonino LETRA.COM
Como se esta 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 publico, 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 unica 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 mayusculas.
6 REM Notese que el usuario puede introducir tanto mayusculas
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 caracter en mayusculas menos 64 (por ejemplo
14 REM 'A'= (65-64) = 1)
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 perm itida. Como se citó en el apartado correspondiente, ERRORLEVEL analiza el numero devuelto mayor, desde el mas alto hasta el mas bajo. Combinando los erroresdevueltos 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. Notese, por ultimo, que la resta se hace del valor ASCII de las mayusculas.
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 unica diferencia estriba en que GOSUB debe incluir el comando RETURN para que el procesamiento continue 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:
El archivo AUTOEXEC.BAT comprueba en el directorio raíz si existe algúna copia de seguridad. Caso de que encontrase algúna, 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 ordenes 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 como actúa a traves de un ejemplo:
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 este entraría en un bucle infinito que sólo permitiría la ejecucion de los programas indicados en las etiquetas.
Despuésde DR DOS 6, Novell absorbio el sistema operativo de Digital Research y lanzó Novell DOS 7, que compatibiliza las mismas ordenes interactivas de su antecesor. Si quiere saber mas sobre este y otros sistemas operativos de reciente aparicion, 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, dandole esta extension 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ésde pasados todos los parametros, el programa cierra el fichero.
Los que utilicen otro compilador, como Borland C++, habran de obviar los mensajes fatídicos que se¤alan el tipo de dato del valor devuelto por la funcion. 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.
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 estandar, 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 este 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 extension .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:
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 mas detalle).
Una vez activado ANSI.SYS se puede realizar cualquier operacion 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 validas, 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 ¨cuando 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 solucion. 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 este o no instalado el controlador de dispositivo original. Esta herramienta se encuentra en las UTILIDADES+2.
Las ordenes de ANSI.SYS se identifican mediante las llamadas secuencias de caracteres (secuencias de escape).
Estas secuencias de caracteres se envían mediante dos metodos: empleando el comando ECHO o el comando PROMPT. La orden TYPE seguido de un fichero de texto también acepta ordenes ANSI para desarrollos mas complejos.
Una secuencia de escape es una combinación unica de caracteres que empieza con el car cter de escape ASCII 27. El caracter 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 caracter, 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.
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
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:
- Puede redefinir algúna tecla con la orden externa "HELP" o con la cadena "/?" seguida de un Intro. De esta forma solo 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 algúnas 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, ademas 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 como 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 metacaracter $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 habra 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 (->).
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..........................................20
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
/ y
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...........................................89
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 algúnas 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 pagina tras pagina, 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 basico; es cuestión de hacer pruebas con su sistema operativo, comprobando en la practica que hace y que‚ 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. Dispondre de todo lo necesario para crear programas con menús, graficos, 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
Cómo utilizar este libro
------------------------
Este libro trata de los ficheros batcor cien la potencia de los ficheros batch.
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 grafica.
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 mas 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 elmensaje 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:
Código:
@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 esta la orden mas frecuente de un archivo AUTOEXEC.BAT. No obstante,hay usuarios que se complican mucho mas el PROMPT e incluso 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:
Metacaracter Texto asociado al mismo
Código:
$b |
$d Fecha del sistema
$e Car cter de escape (al que mas adelante me referir‚ como parte basica de la programación gráfica y ANSI)
$g >
&h Caracter 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:
Código:
@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 valida 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 parametro adecuado. Cuando esto sucede, el primer PROMPT restablece el 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 algúnas ordenes, redireccionando la salida a un dispositivo nulo, pero existen algúnas ó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, sabiendolo usar, puede sernos de utilidad en algúnas 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 mas aclaraciones.
[Parametros] [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 caracter %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 mas claro, si el primer par metro de un fichero por lotes es C:\NORTON, para la siguiente orden:
Código:
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 este. Podemos interrumpir la ejecución de un archivo con la secuencia Control-C (F6). Veamos un ejemplo:
Código:
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, este 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, presentare este 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.
Código:
@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:
Código:
@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 (con o sin trayectoria) del archivo batch.
Si crea un archivo por lotes que haga uso de tres par metros, piense que algúnas ó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.
Ademas 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ódigo:
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:
Código:
SET FILE=
Con todo lo aprendido, veamos un ejemplo.
Código:
@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, habra de saltarse el siguiente párrafo, continuar con la lectura y volver luego a estas explicaciones cuando los conceptos hayan sido esclarecidos.
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 parentesis. 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 parametro. 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 después del archivo batch-.
Código:
@ECHO OFF
VER
VOL
CALL FORMATEA %1
FORMATEA.BAT es un archivna 12 archivo no existe continua la ejecución del archivo batch con el siguiente comando. T‚ngase en cuenta que el DOS solo 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 estas detras 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 ordenes separando las por el caracter ' ' (CTRL-T). El parametro NOT, si se coloca, invierte la condición.
La condición 'IF [NOT] cadena1==cadena2 orden' comprueba si dos cadenas de caracteres son identicas; 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 comun cuando se comprueba un par metro del archivo batch:
Código:
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:
Código:
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:
Código:
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 continua con el proceso de la condición de acuerdo con los valores obtenidos. La situación de terminación de algúnos 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, solo hay diez ordenes estandar del DOS que devuelven codigos 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
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, ademas, nuevos codigos de salida para algúnos 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
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 parametro 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 publico).
Código:
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.
Código:
@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 *
***********************************************
* < 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.
Código:
@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.
NUEVOS COMANDOS INTERACTIVOS PARA LOS FICHEROS POR LOTES
--------------------------------------------------------
3.1 Norton, el rey Midas de la informatica, 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 mas adelante, el DOS guarda algúnos trucos para realizar algúnos 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 expansion 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, solo hay que combinar un fichero con otro. Por ejemplo, el programa INSTALA.BAT a¤ade una línea al AUTOEXEC.BAT.
Código:
@ECHO OFF
CLS
REM Programa INSTALA.BAT
ECHO ¨INSTALA [unidad origen:] [unidad destino:]?
ECHO Si no es correcto pulse CTRL-C
PAUSE > NUL
%2
CD %2\
COPY %2\AUTOEXEC.BAT+%1\AYUDA %2\AUTOEXEC.BAT
MD INSTALL
CD INSTALL
COPY %1\*.*
El fichero AYUDA contendría lo siguiente:
Código:
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 ultima 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
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 ERRORLEVEL (hasta un m ximo de 254), y COLOR al par metro que colorea el texto del mensaje.
La sintaxis de todas las ordenes 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. Tambien se puede utilizar AP junto con SONIDO para producir efectos interesantes. Los resultados obtenidos varían en funcion de la pantalla gr fica que tengamos; habra que experimentar para comprobar las mejores combinaciones. Los programadores de ficheros por lotes habran de probar en distintos ordenadores antes de decidirse por incluir una pantalla así creada en su programa.
La sintaxis del subcomando es la siguiente:
Código:
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 anonino LETRA.COM
Como se esta 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 publico, 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 unica 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 mayusculas.
6 REM Notese que el usuario puede introducir tanto mayusculas
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 caracter en mayusculas menos 64 (por ejemplo
14 REM 'A'= (65-64) = 1)
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 perm itida. Como se citó en el apartado correspondiente, ERRORLEVEL analiza el numero devuelto mayor, desde el mas alto hasta el mas bajo. Combinando los erroresdevueltos 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. Notese, por ultimo, que la resta se hace del valor ASCII de las mayusculas.
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 unica diferencia estriba en que GOSUB debe incluir el comando RETURN para que el procesamiento continue 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:
Código:
IF EXIST *.BAK GOSUB BORRABAK
GOTO SIGUE
:BORRABAK
DEL *.BAK
RETURN
:SIGUE
El archivo AUTOEXEC.BAT comprueba en el directorio raíz si existe algúna copia de seguridad. Caso de que encontrase algúna, 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 ordenes 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 como actúa a traves de un ejemplo:
Código:
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 este entraría en un bucle infinito que sólo permitiría la ejecucion de los programas indicados en las etiquetas.
Despuésde DR DOS 6, Novell absorbio el sistema operativo de Digital Research y lanzó Novell DOS 7, que compatibiliza las mismas ordenes interactivas de su antecesor. Si quiere saber mas sobre este y otros sistemas operativos de reciente aparicion, 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, dandole esta extension 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ésde pasados todos los parametros, el programa cierra el fichero.
Los que utilicen otro compilador, como Borland C++, habran de obviar los mensajes fatídicos que se¤alan el tipo de dato del valor devuelto por la funcion. 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.
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 estandar, 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 este 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 extension .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:
Código:
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 mas detalle).
Una vez activado ANSI.SYS se puede realizar cualquier operacion 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 validas, 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 ¨cuando 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 solucion. 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 este o no instalado el controlador de dispositivo original. Esta herramienta se encuentra en las UTILIDADES+2.
Las ordenes de ANSI.SYS se identifican mediante las llamadas secuencias de caracteres (secuencias de escape).
Estas secuencias de caracteres se envían mediante dos metodos: empleando el comando ECHO o el comando PROMPT. La orden TYPE seguido de un fichero de texto también acepta ordenes ANSI para desarrollos mas complejos.
Una secuencia de escape es una combinación unica de caracteres que empieza con el car cter de escape ASCII 27. El caracter 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 caracter, 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.
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
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:
Código:
PROMPT $E[0;68;"|MORE$_"p
- Puede redefinir algúna tecla con la orden externa "HELP" o con la cadena "/?" seguida de un Intro. De esta forma solo 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 algúnas 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, ademas 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 como 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 metacaracter $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 habra 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 (->).