for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
set "DEL=%%a"
)
After this block, the DEL
variable contains a <backspace><space><backspace>
string, created in the FOR loop by the prompt $H
.
This works, as the command block for the for-loop is
prompt #$H#$E#
echo on
for %%b in (1) do rem
This sets the prompt first to #<BACKSPACE><SPACE><BACKSPACE>#<ESCAPE>#
(The escape is senseless here, I just copied it from my string library).
But normally the prompt wouldn't be visible, so I enable ECHO ON
and then you need something that the prompt would appear and that will be done with the for %%b in (1) do rem
.
The DEL character will be used later as file content.
:ColorText
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1
The first line of this function creates a file with the content of the DEL
variable.
The filename is named like the string you want to color.
This is important for the findstr command.
The findstr /v /a:%1 /R "^$" "%~2" nul
will be find any line by /R "^$"
.
As two files are listed (nul is the second filename) each filename will be outputted and colored by the value of /a:%1
.
As the file NUL
has no content it will not be outputted at all.
And the first filename will be outputted also with a colon followed by the file content.
Sample, assume the file content is ABC
and the filename is Hello
The output of findstr would be
Hello:ABC
But as I place the <backspace><space><backspace>
into the file content the colon will be deleted.
The del "%~2" > nul 2>&1
deletes the temporary file after all.