[BATCH] Colored ECHO función

Iniciado por Binary_Death, 22 Julio 2012, 01:03 AM

0 Miembros y 1 Visitante están viendo este tema.

Binary_Death

Esta es una versión que hice de la ya muy antigua función de echo coloreado usando findstr.
¿Recuerdan que siempre quedaban los dos puntos al final de la cadena? He visto formas de eliminarlos que hicieron algunos usuarios, de varias maneras.

Aquí dejo yo una que es muy corta:


@Echo Off
for %%x in (0,1,2,3,4,5,6,7,A,B,C,D,E,F) do (
for %%y in (0,1,2,3,4,5,6,7,A,B,C,D,E,F) do (
call:_echo "Color %%x%%y" %%x%%y
)
)
exit
:_echo
chdir "%temp%"
exit|cmd /k prompt $H>"%~1"
findstr /v /a:%~2 /r "^$" "%~1*" && ECHO+
del /f /q "%~1"
goto:eof


Como pueden ver, aquí el propio carácter backspace está incluido en en fichero que se le pasa como parámetro a findstr.

Un saludo

Eleкtro









Eleкtro

Tu code es un buen reemplazamiento del comando colous si solo se pretende usar su función para colorear frases (De un solo color)

Le he dado un par de vueltas a tú función para usarlo de una forma más "novata":

Código (dos) [Seleccionar]
@Echo OFF

REM Colored Echo
REM Mod by Elektro H@cker
REM Code original by Binary_Death

:: Modo de empleo:
::
:: Modo Normal:
:: Call :Color [NOMBRE DEL COLOR DE FONDO] [NOMBRE DEL COLOR DE TEXTO] "TEXTO"
::
:: Modo Hex:
:: Call :Color [DÍGITO DEL COLOR DE FONDO EN HEXADECIMAL] [DÍGITO DEL COLOR DE TEXTO EN HEXADECIMAL] "TEXTO"

:: Ejemplos de uso:
Call :Color ROJO BLANCO       "Hola mundo!"
Call :Color NEGRO VERDE2      "Hola mundo!"
Call :Color ROSA NEGRO        "Hola mundo!"
Call :Color NINGUNO AMARILLO2 "Hola mundo!"
Call :Color F A "Hola mundo!"
Call :Color A F "Hola mundo!"
Call :Color D E "Hola mundo!"
Call :Color 4 8 "Hola mundo!"
Pause
Exit


:Color

REM Lista de parámetros/colores :
REM :: :: :: :: :: :: :: :: :: ::
REM NINGUNO (No cambiar el color por defecto de fondo/texto)
REM
REM BLANCO
REM AMARILLO
REM ROJO
REM AZUL
REM AGUA
REM PURPURA
REM ROSA
REM VERDE
REM GRIS
REM NEGRO
REM BLANCO2
REM AMARILLO2
REM ROJO2
REM AZUL2
REM AGUA2
REM VERDE2

IF /I "%~1" EQU "NEGRO"     (Set Back_Color=0)
IF /I "%~1" EQU "AZUL"      (Set Back_Color=1)
IF /I "%~1" EQU "VERDE"     (Set Back_Color=2)
IF /I "%~1" EQU "AGUA"      (Set Back_Color=3)
IF /I "%~1" EQU "ROJO"      (Set Back_Color=4)
IF /I "%~1" EQU "PURPURA"   (Set Back_Color=5)
IF /I "%~1" EQU "AMARILLO"  (Set Back_Color=6)
IF /I "%~1" EQU "BLANCO"    (Set Back_Color=7)
IF /I "%~1" EQU "GRIS"      (Set Back_Color=8)
IF /I "%~1" EQU "AZUL2"     (Set Back_Color=9)
IF /I "%~1" EQU "VERDE2"    (Set Back_Color=A)
IF /I "%~1" EQU "AGUA2"     (Set Back_Color=B)
IF /I "%~1" EQU "ROJO2"     (Set Back_Color=C)
IF /I "%~1" EQU "ROSA"      (Set Back_Color=D)
IF /I "%~1" EQU "AMARILLO2" (Set Back_Color=E)
IF /I "%~1" EQU "BLANCO2"   (Set Back_Color=F)
IF /I "%~2" EQU "NEGRO"     (Set Text_Color=0)
IF /I "%~2" EQU "AZUL"      (Set Text_Color=1)
IF /I "%~2" EQU "VERDE"     (Set Text_Color=2)
IF /I "%~2" EQU "AGUA"      (Set Text_Color=3)
IF /I "%~2" EQU "ROJO"      (Set Text_Color=4)
IF /I "%~2" EQU "PURPURA"   (Set Text_Color=5)
IF /I "%~2" EQU "AMARILLO"  (Set Text_Color=6)
IF /I "%~2" EQU "BLANCO"    (Set Text_Color=7)
IF /I "%~2" EQU "GRIS"      (Set Text_Color=8)
IF /I "%~2" EQU "AZUL2"     (Set Text_Color=9)
IF /I "%~2" EQU "VERDE2"    (Set Text_Color=A)
IF /I "%~2" EQU "AGUA2"     (Set Text_Color=B)
IF /I "%~2" EQU "ROJO2"     (Set Text_Color=C)
IF /I "%~2" EQU "ROSA"      (Set Text_Color=D)
IF /I "%~2" EQU "AMARILLO2" (Set Text_Color=E)
IF /I "%~2" EQU "BLANCO2"   (Set Text_Color=F)

Echo "%~1%~2"|Findstr "\"..\"" >NUL && Set Back_Color=%~1&& Set Text_Color=%~2

IF /I "%~1" EQU "NINGUNO"   (
For /F "Tokens=2 Delims=x" %%X in ('Reg query "HKCU\Console" /v "Screencolors" 2^>NUL') Do (
Echo "%%X"|Findstr "\"..\"" >NUL && Set "Back_Color=%%X" && Call Set "Back_Color=%%Back_Color:~0,1%%" || (Set Back_Color=0)
)
) || (Set Back_Color=0)

IF /I "%~2" EQU "NINGUNO"   (
For /F "Tokens=2 Delims=x" %%X in ('Reg query "HKCU\Console" /v "Screencolors" 2^>NUL') Do (
Set "Text_Color=%%X" && Call Set "Text_Color=%%Text_Color:~-1%%"
)
) || (Set Text_Color=7)

If Not defined Back_Color (Echo [Colored echo error] Color de fondo incorrecto "%~1". & exit /B 1)
If Not defined Text_Color (Echo [Colored echo error] Color de texto incorrecto "%~2". & exit /B 1)
IF "%~3" EQU ""           (Echo [Colored echo error] No hay texto que mostrar. & Exit /B 1)

CHDir "%TEMP%"
Exit|CMD /K Prompt $H>"%~3"
Findstr /V /A:%Back_Color%%Text_Color% /R "^$" "%~3*" 2>NUL && ECHO: || (Echo [Colored echo error] Error desconocido. & Exit /B 1)
Del /F /Q "%~3"
Set "Back_Color="
Set "Text_Color="
Goto :EOF


Saludos!








Binary_Death

Muy bien  :P así queda mucho más completa como comando.

Como nota para que añadas otro parámetro al comando, se puede colorear una frase de muchos colores distintos. De hecho, es el "ECHO+" después del findstr el que hace el salto de línea. Podrías añadirle un parámetro para elegir si hacer o no ese LF y de esa forma permitir poner una palabra destacada en un texto, de otro color ;)

Eleкtro

#4
Cita de: Binary_Death en 24 Julio 2012, 09:21 AM
Muy bien  :P así queda mucho más completa como comando.

Como nota para que añadas otro parámetro al comando, se puede colorear una frase de muchos colores distintos. De hecho, es el "ECHO+" después del findstr el que hace el salto de línea. Podrías añadirle un parámetro para elegir si hacer o no ese LF y de esa forma permitir poner una palabra destacada en un texto, de otro color ;)

Si, Lo habia pensado, Pero llegué a la conclusión (Sin poner en práctica un pseudocódigo) de que debería usar parámetros como delimitadores, tipo:
Call :Color [Rojo] hola [amarillo] mundo

Creo que para algo así más extenso ya está colous
PD: Pero vamos, que si alguien lo quiere añadir al código... xD

Salu2!