Сам я ни черта не понимаю в cmd, поэтому искал решение в интернетах.
Насколько я понял,
color для этого не используют т.к. он меняет цвет во всей сессии. Зато используют какой-то хак с командой
findstr, которой можно явно указать цвет выводимого ею сообщения.
Вот что нарыл:
:write
setlocal
:write1
set "tempFolder=%TEMP%\%~n0.%time:~-2%.%random%"
md "%tempFolder%" 2>nul || goto write1
pushd %tempFolder%
set /p .=.<nul>"%~2"
findstr /a:%~1 /c:"." /s "%~2"
popd
rd /s /q "%tempFolder%" 2>nul
endlocal & exit /b
:writeLn
call :write %1 "%~2"
echo:
exit /b
Эта фигня работает почти как надо, за исключением того, что добавляет двоеточие и точку в конце. То есть вызов
call :write 0A "My Charona"
вернет
My Charona:.
, где
My Charona и двоеточие будут зеленого цвета, а точка - дефолтного.
Некоторые строчки кода для меня почти ясны (
findstr /a:%~1 /c:"." /s "%~2"
), некоторые вообще черная магия (
set /p .=.<nul>"%~2"
).
Можно ли как-то избавиться от двух последних символов в строке, которую выводит
findstr?
Кстати, да: если из кода убрать все операции с директориями, функционал не меняется абсолютно, все работает так же.