Page 1 of 1
Color Tool [expanded]
Posted: 29 Nov 2012 08:02
by Boombox
.
I'd like to colour specific words and variables in the CMD window.
Maybe even use FINDSTR to search a file, highlighting the string as found.
Is there a way to do this?
Thanks.
Re: Color Tool [expanded]
Posted: 29 Nov 2012 08:16
by foxidrive
MF (Maxfind) can find keywords in a text file and display them coloured.
This recent post on this topic in another thread showed syntax highlighting in a bat file, which you will get in various programmers editors like Notepad ++
Boombox wrote:.
Regardless of the input file size, computational power...
This,
@echo off
echo %var%>test.txt
copy test.txt d:\test.txt
::This is green!
pause
exit
should look like this...
@echo off
echo %var%>test.txt
copy test.txt d:\test.txt
::This is green!
pause
exit
Thanks.
Re: Color Tool [expanded]
Posted: 29 Nov 2012 08:29
by Squashman
I believe Swiss File Knife can do colored text based on a filter or hit option.
Re: Color Tool [expanded]
Posted: 29 Nov 2012 08:30
by abc0502
I don't know if i understood you correctly but this all what i was able to come with:
Code: Select all
@Echo OFF
setlocal enabledelayedexpansion
set C=0
For /F "tokens=1* delims= " %%A in ('Type "text.txt"') Do (
set /a C+=1
SET "A=%%A"
SET "B=%%B"
:: @Echo
IF /I "!A:~0!" == "@Echo" (
Call :colorPrint 0D "@"
Call :colorPrintVar 03 "A:~1"
Call :colorPrint 08 " "
IF /I "!B!" EQU "off" Call :colorPrint 07 "%%B"
IF /I "!B!" EQU "on" Call :colorPrint 07 "%%B"
Echo.)
:: Comment
IF /I "!A:~0,2!" EQU "::" (
Call :colorPrintVar 02 "A"
Call :colorPrint 08 " "
Call :colorPrintVar 02 "B"
Echo.)
:: CLS
IF /I "!A!" EQU "cls" (
Call :colorPrintVar 02 "A"
Call :colorPrint 08 " "
IF Not "!B!" EQU "" Call :colorPrintVar 0F "B"
Echo.)
:: Labels
IF /I "!A:~0,1!" EQU ":" (
IF /I not "!A:~1,2!" EQU ":" (
Call :colorPrintVar 60 "A"
Echo.))
:: Echo
IF /I "!A!" EQU "echo" (
Call :colorPrintVar 03 "A"
Call :colorPrint 08 " "
Call :colorPrintVar 0F "B"
Echo.)
:: Goto
IF /I "!A!" EQU "goto" (
Call :colorPrintVar 03 "A"
Call :colorPrint 08 " "
CAll :colorPrintVar 06 "B"
Echo.)
:: Pause / Pause >nul
IF /I "!A!" EQU "pause" (
Call :colorPrintVar 03 "A"
Call :colorPrint 08 " "
CAll :colorPrintVar 04 "B"
Echo.)
:: Pause>nul
IF /I "!A!" EQU "pause>nul" (
Call :colorPrintVar 03 "A:~0,5"
CAll :colorPrintVar 04 "A:~-4"
Echo.)
:: Call
IF /I "!A!" EQU "call" (
Call :colorPrintVar 03 "A"
Call :colorPrint 08 " "
Call :colorPrintVar 06 "B"
Echo.)
:: Set
IF /I "!A!" EQU "set" (
Call :colorPrintVar 03 "A"
Call :colorPrint 08 " "
Call :colorPrintVar 0E "B"
Echo.)
:: IF
IF /I "!A!" EQU "if" (
Call :colorPrintVar 03 "A"
Call :colorPrint 08 " "
Call :colorPrintVar 0F "B"
Echo.)
:: For
IF /I "!A!" EQU "for" (
Call :colorPrintVar 03 "A"
Call :colorPrint 08 " "
Call :colorPrintVar 0F "B"
Echo.)
)
pause>nul
exit
set "text=Dave's version works in Win XP, 7 & 8 "Hurray!""
call :colorPrintVar 9b text /n
call :colorPrint 3F " /:\ Part 1 "
call :colorPrint 4F " Part 2 /:\" /n
echo Success!
exit /b
:colorPrint Color Str [/n]
if not defined DEL call :initColorPrint
setlocal disableDelayedExpansion
set "s=%~2"
call :colorPrintVar %1 s %3
exit /b
:colorPrintVar Color StrVar [/n]
if not defined DEL call :initColorPrint
setlocal enableDelayedExpansion
pushd .
':
cd \
set "s=!%~2!"
:: The single blank line within the following IN() clause is critical - DO NOT REMOVE
for %%n in (^"^
^") do (
set "s=!s:\=%%~n\%%~n!"
set "s=!s:/=%%~n/%%~n!"
set "s=!s::=%%~n:%%~n!"
)
set "s=!s:"=\"!"
for /f delims^=^ eol^= %%s in ("!s!") do (
if "!" equ "" setlocal disableDelayedExpansion
if %%s==\ (
findstr /a:%~1 "." "\'" nul
<nul set /p "=%DEL%%DEL%%DEL%"
) else if %%s==/ (
findstr /a:%~1 "." "/.\'" nul
<nul set /p "=%DEL%%DEL%%DEL%%DEL%%DEL%"
) else (
findstr /a:%~1 "." "%%s\..\'" nul
<nul set /p "=%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%"
)
)
if /i "%~3"=="/n" echo(
popd
exit /b
:initColorPrint
for /f %%A in ('"prompt $H&for %%B in (1) do rem"') do set "DEL=%%A %%A"
<nul >"%temp%\'" set /p "=."
subst ': "%temp%" >nul
exit /b
:cleanupColorPrint
2>nul del "%temp%\'"
>nul subst ': /d
exit /b
And This is the TXT file:
@Echo Off
@Echo on
CLS
:Test_Label
:: This is a comment
echo This is a normal text
pause>nul
pause >nul
Call :test_function "input"
goto :eof
set "test=sdasdasd"
if %test%==esasdasd
For %%a in (test) do echo %%a
Re: Color Tool [expanded]
Posted: 29 Nov 2012 08:57
by Boombox
.
Well done ABC! and thank you very much. That's exactly what I wanted.
It has a few problems when I enter garbage into the text file.
But this will give me everything I need to work with, thanks again.
Re: Color Tool [expanded]
Posted: 29 Nov 2012 09:23
by abc0502
I tried to make it display the empty lines as well but no luck also didn't test on the special chars or if the command isn't at the start.
but if you want to do such thing it will be a lot easier if you try by another programming language
Re: Color Tool [expanded]
Posted: 29 Nov 2012 19:18
by Aacini
Would you accept a solution that use an .exe file other than FINDSTR.EXE? Previous solution use FINDSTR command that is an .exe file about 27 KB size. There is another solution based on a different .exe file (ColorShow.exe of just 3.5 KB size) that run
much faster than FINDSTR and is easier to use. The only detail is that FINDSTR.exe file is already installed in your computer, but you must copy ColorShow.exe file from
this site; look for:
12- ColorShow.exe.hex.
Code: Select all
@echo off
setlocal EnableDelayedExpansion
set "listedCommands= echo cls goto pause call exit set if for "
set "compoundCommands= if for "
set compoundCommandsWords=lss leq equ neq geq gtr in do
for /F "tokens=1*" %%a in (text.txt) do (
set "command=%%a"
rem If line begins with colon: is special case
if "!command:~0,1!" equ ":" (
if "!command:~1,1!" equ ":" (
rem Double colon at beginning: whole line in green
set colorShow=/02 "%%a " "%%b"
) else (
rem Label: in light green
set colorShow=/0A "%%a"
)
) else (
rem Normal commands: command params
set "params=%%b"
set colorShow=
rem Arroba in first position: in magenta
if "!command:~0,1!" equ "@" (
set colorShow=/0D "@"
set "command=!command:~1!"
)
rem Identify the type of command
for %%a in (!command!) do if "!listedCommands: %%a =!" neq "%listedCommands%" (
rem Listed commands: in blue
set colorShow=!colorShow! /09 "%%a "
) else (
rem Unlisted commands: in original color
set colorShow=!colorShow! / "%%a "
)
rem Additional processing of FOR and IF commands
for %%a in (!command!) do if "!compoundCommands: %%a =!" neq "%compoundCommands%" (
rem Special words in FOR and IF: in pink
for %%c in (%compoundCommandsWords%) do set params=!params:%%c=" /0C "%%c" / "!
rem Nested commands in FOR and IF: in blue
for %%c in (%listedCommands%) do set params=!params:%%c=" /09 "%%c" / "!
)
rem Unprocessed parameters: in original color
set colorShow=!colorShow! / "!params!"
)
colorShow !colorShow! 13 10
)
Antonio
Re: Color Tool [expanded]
Posted: 30 Nov 2012 05:01
by Boombox
.
Thanks all. But I'm still struggling.
I have a text file containing colour codes.
a=44
b=17
c=29
d=4f
etc.
And a text file containing simple ascii art.
How can I compare the two files and print the ascii art to the command window with the colours I specify?
Re: Color Tool [expanded]
Posted: 30 Nov 2012 08:27
by Aacini
Boombox wrote:How can I compare the two files and print the ascii art to the command window with the colours I specify?
If you mean
How to print each letter in the ascii art file with the colour code (for the same letter) given in first file?, then this is the solution (using colorShow command, I am pretty sure that doing the same task with FINDSTR will be a nightmare!)
Code: Select all
@echo off
setlocal EnableDelayedExpansion
rem Load color codes from first file
for /F "delims=" %%a in (colourCodes.txt) do (
set %%a
)
rem Print the Ascii art file
set line=
call :PrintAsciiArt < asciiArt.txt
goto :EOF
:PrintAsciiArt
rem Read each line in the file (an empty line stop the process!)
set /P line=
if not defined line exit /B
rem Separate each letter in the line and assemble colorShow parameters
set colorShow=
:nextLetter
set letter=%line:~0,1%
rem For each Letter, insert: /attribute of the Letter, and the "Letter"
set colorShow=%colorShow% /!%letter%! "%letter%"
rem Pass to next letter
set line=%line:~1%
if defined line goto nextLetter
rem Print the resulting colorShow line
colorShow %colorShow% 13 10
rem And pass to next line
goto PrintAsciiArt
Please, test this program and report the result. I would like to see a picture of the output!
Antonio
PS - Note that you can NOT specify different colors for lowcase and upcase letters; they both will have the same (last defined) color.
PPS - Could you post a color codes and ascii art files, please?