martes, 16 de diciembre de 2014

Presentación en Batch


Al momento hacer un programa la presentación del mismo es importante ya que si lo usamos a menudo y lo dejamos siendo solo un montón de comandos se volverá tosco y enredado a la vista.
Como bien sabemos, CMD no tiene muchas formas ni herramientas para "adornarlo" o mejorarlo visualmente, pero con un poco de imaginación se pueden lograr algunos cambios.

Pondremos en practica los comando básicos ya mencionados en otros post y jugaremos un poco con ellos para ver si sale algo interesante.

Antes de empezar me gustaría poner la leyenda de los colores usados en palabras explícitas.

    Leyenda:
            Palabras color Amarillo=Palabras Claves
            Palabras color Azul Claro=Variables
            Palabras color Verde=Comentarios
            Signos en color Verde Claro=Simbología operacional
            Palabras color Naranjo sobre Café=Etiquetas
            Palabras color Morado Claro=Comandos

Existe un comando en CMD que nos permite cambiar los colores de los caracteres en pantalla y del fondo.
El comando es "Color" y es muy fácil de usar.

        Sintáxis:
                Color [opción de colores]
                   
                    Opciones:
                            0 = Negro       8 = Gris
                            1 = Azul        9 = Azul claro
                            2 = Verde       A = Verde claro
                            3 = Aguamarina  B = Aguamarina claro
                            4 = Rojo        C = Rojo claro
                            5 = Púrpura     D = Púrpura claro
                            6 = Amarillo    E = Amarillo claro
                            7 = Blanco      F = Blanco brillante
                           
                Ejemplo: Color 0B  (Así lo tengo yo por defecto)

Hay otra forma de cambiar el color de los caracteres y por separado. El problema de este código es que hace más lenta la ejecución de los comandos.
El autor de esta función es desconocido.


        REM
        Set /P ".=Este texto se imprime antes del primero de color " <nul
        Call :ColorText 0A "Este es el texto con color Verde"
        Set /P ".= Este texto va en medio de los dos texto de color " <nul
        Call :ColorText 0C "Este es el texto con color rojo" end
        Echo. Y esto es el texto despus de los textos de color.
        Echo.
        Pause
        Exit

        REM Esta es la función que convierte el texto a color.
        REM Se recomienda no modificarla y no convertirá más los textos.
        :ColorText [%1 = Color] [%2 = Text]
        Set /P ".=.">"%~2"<nul
        Findstr /V /A:%1 /R "^$" "%~2" nul 2>nul
        Set /P ".=   "<nul
        If "%3"=="end" Set /P ".= "<nul
        Del "%~2">nul 2>nul
        Exit /b
       
    Explicaré un poco esta función para aquellos que quieran darse el trabajo de programar algo usándola.
   
    Los comandos que se usan aquí son:
                                    Set (Explicado en un post anterior)
                                    Call (Explicado en un post anterior)
                                    Echo (Explicado en un post anterior)
                                    Pause = Este comando hace una pausa en la ejecución de comandos hasta que el usuario presione una tecla.
                                    Exit = Este comando cierra la CMD, pero si está habilitado el modificador "/B" solo termina una instrucción.
                                    Etiqueta ":ColorText" (Explicado en un post anterior)
                                    Findstr (Buscador avanzado de archivos u objetos)
                                    If (Explicado en un post anterior)
                                    Del = Comando que elimina un o más archivos indicados por el usuario mediante una ruta.
                                   
    La función mostrada arriba es algo compleja de explicar para aquellos que recién se insertan en Batch, así que intentaré explayarme lo mejor posible.
   
    Voy a referirme a esta función como "Colorear".
    Lo primero que hace es capturar con "Set /P" los textos que serán impresos con el color DEFAULT de la consola y con "Call:ColorText" los que van a ser coloreados.
    Como se puede apreciar después de "Call:ColorText" va un código Hexadecimal por ejemplo "0A" que sería el color Verde según la tabla de color ya mencionada.
    Otro punto a destacar es que luego de la última frase, palabra, caracter o letra que va a ser pintado viene un agregado que dice "end", bueno, esto hace que la función se detenga y no siga conviertiendo a color.
    En la etiqueta ":ColorText" se ve que hay un contenido dentro de paréntesis de corchete, y es porque a la etiqueta se le han añadido don variables (%1 que es el color en este caso y %2 que es el texto), las cuales adquieren los datos desde la misma etiqueta.
    El comando Findstr busca con "/V" que no coincidan, luego adquiere los colores en Hexadecimal de la variable "%1" y con "/R" añade la búsqueda por expresiones regulares (opciones) para capturar el inicio(^) y final($) de la línea en el texto "%2".
    El comando "If" compara una tercera variable deducible por la consola (%3) la cual busca si existe "end" en el texto para dar el termino a la función. Con el comando "Del" se borra el archivo en donde guarda información la(s) variable(s), y este se crea en el directorio donde fue abierta la aplicación.
    Por último se usa el comando "Exit /B" para volver a la línea de instrucciones que estaba antes de ser llamada la función.
   

Existen programas apartes que se pueden ejecutar como comandos en la consola. Uno de ellos es Colous.exe y es el más usado en el ambiente gráfico de CMD.
No puedo poner links ni nada por el estilo. Lo que sí puedo hacer es mencionar a la persona que creó aquel programa, y su nombre es "Bolivianito" al cual se le agradece mucho darse el trabajo de seguir actualizando tal herramienta.


        Ejemplos de consolas modificadas mediante comandos:
               
Bandera Chile
Uso de la función "colorear" (Click para ver imagen en grande)

CMD se ha vuelto loca!
Uso de comandos simples. (Locura)

No hay comentarios.: