Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Binary_Death en 22 Julio 2012, 01:03 am



Título: [BATCH] Colored ECHO función
Publicado por: Binary_Death en 22 Julio 2012, 01:03 am
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:

Código:
@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


Título: Re: Colored ECHO función
Publicado por: Eleкtro en 22 Julio 2012, 09:33 am
Buen code!


Título: Re: Colored ECHO función
Publicado por: Eleкtro en 24 Julio 2012, 08:17 am
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
  1. @Echo OFF
  2.  
  3. REM Colored Echo
  4. REM Mod by Elektro H@cker
  5. REM Code original by Binary_Death
  6.  
  7. :: Modo de empleo:
  8. ::
  9. :: Modo Normal:
  10. :: Call :Color [NOMBRE DEL COLOR DE FONDO] [NOMBRE DEL COLOR DE TEXTO] "TEXTO"
  11. ::
  12. :: Modo Hex:
  13. :: Call :Color [DÍGITO DEL COLOR DE FONDO EN HEXADECIMAL] [DÍGITO DEL COLOR DE TEXTO EN HEXADECIMAL] "TEXTO"
  14.  
  15. :: Ejemplos de uso:
  16. Call :Color ROJO BLANCO       "Hola mundo!"
  17. Call :Color NEGRO VERDE2      "Hola mundo!"
  18. Call :Color ROSA NEGRO        "Hola mundo!"
  19. Call :Color NINGUNO AMARILLO2 "Hola mundo!"
  20. Call :Color F A "Hola mundo!"
  21. Call :Color A F "Hola mundo!"
  22. Call :Color D E "Hola mundo!"
  23. Call :Color 4 8 "Hola mundo!"
  24.  
  25.  
  26. :Color
  27.  
  28. REM Lista de parámetros/colores :
  29. REM :: :: :: :: :: :: :: :: :: ::
  30. REM NINGUNO (No cambiar el color por defecto de fondo/texto)
  31. REM
  32. REM BLANCO
  33. REM AMARILLO
  34. REM ROJO
  35. REM AZUL
  36. REM AGUA
  37. REM PURPURA
  38. REM ROSA
  39. REM VERDE
  40. REM GRIS
  41. REM NEGRO
  42. REM BLANCO2
  43. REM AMARILLO2
  44. REM ROJO2
  45. REM AZUL2
  46. REM AGUA2
  47. REM VERDE2
  48.  
  49. IF /I "%~1" EQU "NEGRO"     (Set Back_Color=0)
  50. IF /I "%~1" EQU "AZUL"      (Set Back_Color=1)
  51. IF /I "%~1" EQU "VERDE"     (Set Back_Color=2)
  52. IF /I "%~1" EQU "AGUA"      (Set Back_Color=3)
  53. IF /I "%~1" EQU "ROJO"      (Set Back_Color=4)
  54. IF /I "%~1" EQU "PURPURA"   (Set Back_Color=5)
  55. IF /I "%~1" EQU "AMARILLO"  (Set Back_Color=6)
  56. IF /I "%~1" EQU "BLANCO"    (Set Back_Color=7)
  57. IF /I "%~1" EQU "GRIS"      (Set Back_Color=8)
  58. IF /I "%~1" EQU "AZUL2"     (Set Back_Color=9)
  59. IF /I "%~1" EQU "VERDE2"    (Set Back_Color=A)
  60. IF /I "%~1" EQU "AGUA2"     (Set Back_Color=B)
  61. IF /I "%~1" EQU "ROJO2"     (Set Back_Color=C)
  62. IF /I "%~1" EQU "ROSA"      (Set Back_Color=D)
  63. IF /I "%~1" EQU "AMARILLO2" (Set Back_Color=E)
  64. IF /I "%~1" EQU "BLANCO2"   (Set Back_Color=F)
  65. IF /I "%~2" EQU "NEGRO"     (Set Text_Color=0)
  66. IF /I "%~2" EQU "AZUL"      (Set Text_Color=1)
  67. IF /I "%~2" EQU "VERDE"     (Set Text_Color=2)
  68. IF /I "%~2" EQU "AGUA"      (Set Text_Color=3)
  69. IF /I "%~2" EQU "ROJO"      (Set Text_Color=4)
  70. IF /I "%~2" EQU "PURPURA"   (Set Text_Color=5)
  71. IF /I "%~2" EQU "AMARILLO"  (Set Text_Color=6)
  72. IF /I "%~2" EQU "BLANCO"    (Set Text_Color=7)
  73. IF /I "%~2" EQU "GRIS"      (Set Text_Color=8)
  74. IF /I "%~2" EQU "AZUL2"     (Set Text_Color=9)
  75. IF /I "%~2" EQU "VERDE2"    (Set Text_Color=A)
  76. IF /I "%~2" EQU "AGUA2"     (Set Text_Color=B)
  77. IF /I "%~2" EQU "ROJO2"     (Set Text_Color=C)
  78. IF /I "%~2" EQU "ROSA"      (Set Text_Color=D)
  79. IF /I "%~2" EQU "AMARILLO2" (Set Text_Color=E)
  80. IF /I "%~2" EQU "BLANCO2"   (Set Text_Color=F)
  81.  
  82. Echo "%~1%~2"|Findstr "\"..\"" >NUL && Set Back_Color=%~1&& Set Text_Color=%~2
  83.  
  84. IF /I "%~1" EQU "NINGUNO"   (
  85. For /F "Tokens=2 Delims=x" %%X in ('Reg query "HKCU\Console" /v "Screencolors" 2^>NUL') Do (
  86. Echo "%%X"|Findstr "\"..\"" >NUL && Set "Back_Color=%%X" && Call Set "Back_Color=%%Back_Color:~0,1%%" || (Set Back_Color=0)
  87. )
  88. ) || (Set Back_Color=0)
  89.  
  90. IF /I "%~2" EQU "NINGUNO"   (
  91. For /F "Tokens=2 Delims=x" %%X in ('Reg query "HKCU\Console" /v "Screencolors" 2^>NUL') Do (
  92. Set "Text_Color=%%X" && Call Set "Text_Color=%%Text_Color:~-1%%"
  93. )
  94. ) || (Set Text_Color=7)
  95.  
  96. If Not defined Back_Color (Echo [Colored echo error] Color de fondo incorrecto "%~1". & exit /B 1)
  97. If Not defined Text_Color (Echo [Colored echo error] Color de texto incorrecto "%~2". & exit /B 1)
  98. IF "%~3" EQU ""           (Echo [Colored echo error] No hay texto que mostrar. & Exit /B 1)
  99.  
  100. CHDir "%TEMP%"
  101. Exit|CMD /K Prompt $H>"%~3"
  102. Findstr /V /A:%Back_Color%%Text_Color% /R "^$" "%~3*" 2>NUL && ECHO: || (Echo [Colored echo error] Error desconocido. & Exit /B 1)
  103. Del /F /Q "%~3"
  104. Set "Back_Color="
  105. Set "Text_Color="
  106. Goto :EOF

Saludos!


Título: Re: Colored ECHO función
Publicado por: 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 ;)


Título: Re: Colored ECHO función
Publicado por: Eleкtro en 24 Julio 2012, 11:26 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:
Código:
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!