При разработке командного файла с выводом довольно большого объёма информации возникла необходимость выделения цветом части текста, например, сообщений о сбоях красным цветом, чтобы они сразу бросались в глаза. Хотелось, чтобы можно было вывести определённым цветом какую-то одну, две строки текста, или вывод определённой программы.
Способы изменения цвета в командной строке и bat файле
Есть несколько довольно часто используемых способов, но они имеют существенные недостатки
- стандартная команда COLOR меняет цвет сразу всего текста в окне
- манипуляции с ANSY.SYS и ESC-последовательностями возможность выводить на экран в процессе работы пакетного файла текст с форматированием по цвету предполагают административные полномочия и не работают в современных версиях Windows
- Раскраска текста с помощью findstr CMD/BAT: Вывод разноцветного текста имеет ограничения по выводимому тексту.
Альтернативное решение – программа nhcolor
В итоге, пришлось написать решение, которое
- может менять цвет текста в консоли по строкам
- не ограничивает выводимый текст
- не требует административных полномочий.
Итак, программа nhcolor имеет два варианта запуска.
Цвет текста входного потока stdin
Программа выводит в заданном цвете весь поток, поступающий на stdin.
Цвет текста задаётся параметром, например, 0c — это светло-красный текст на черном фоне, а входной поток направляется в nhcolor
echo Файл не найден | nhcolor 0c
Результат:
Цвет текста, заданного в командной строке
Программа выводит текст, указанный в командной строке, заданным цветом.
Цвет текста задаётся первым параметром, например, 0a — это светло-зелёный текст на черном фоне, а выводимый текст задаётся в аргументах nhcolor
nhcolor 0a Архивирование закончено
Результат:
Ещё один пример, который показывает вывод всех 15 доступных цветов текста на черном тексте:
Таблица цветов
Цвета обозначаются теми же кодами, что и в команде COLOR.
Атрибуты цветов задаются в виде ДВУХ шестнадцатеричных цифр — первая задает цвет фона, а вторая определяет цвет символа.
Цифра | Цвет |
0 | Черный |
1 | Синий |
2 | Зеленый |
3 | Голубой |
4 | Красный |
5 | Лиловый |
6 | Желтый |
7 | Белый |
8 | Серый |
9 | Светло-синий |
A | Светло-зеленый |
B | Светло-голубой |
C | Светло-красный |
D | Светло-лиловый |
E | Светло-желтый |
F | Ярко-белый |
Ссылки
Загрузка новой версии программы nhcolor
Есть ли вариант nhcolor без перевода строки. Самому ставить c/c++ в лом и некогда. Но очень надо обыскался в инете.
Да, всем некогда.
А как именно надо? Чтобы ставить цвет на часть строки, а не на всю?
nhcolor v2.1.0.2 с заданием цвета на часть строки, выглядит так:

Есть вариант nhcolor вывод без перевода строки. Самому ставить C/C++ настраивать среду в лом и некогда. А очень надо.
Есть пару вопросов ,1.Как установить программу. 2.Работает ли на Windows 10. 3.Есть ли вирусы.
1. Скачать ZIP и распаковать. 2. В Windows 10 работает. 3. Вирусов нет, но рекомендую проверять, например, через VirusTotal.
есть вопросик…
делаю пинг со звуком:
ping -t 10.0.0.1 | nhrt -spt:"TTL" -et:"TTL\x07"
всё ок, а можно-ли сделать так что-бы пинг в зависимости от результата выводился разным цветом:
ну типа если есть TTL то зелёным цветом?
(можно даже без замены)
да, если построчно разбирать вывод ping и в зависимости от содержания строки выводить через nhcolor в том или ином цвете
Эм, построчно разбирать вывод Ping …
пардон это как?
если просто в командной строке, то так
for /F "delims=" %i IN ('ping.exe -n 10 ya.ru') DO @echo %i | find /V "TTL" | nhcolor 0C & @echo %i | find "TTL"
соответственно, в bat файле
@echo off
for /F "delims=" %%i IN ('ping.exe -n 10 ya.ru') DO @echo %%i | find /V "TTL" | nhcolor 0C & @echo %%i | find "TTL"
Это работает, но с одним минусом — весь вывод буферизируется и показывается только после завершения ping. Такая особенность работы cmd. Попозже напишу, как можно сделать через JScript без задержки вывода.
Так-с, получается примерно понял как енто работает…
у меня получился вот такой в итоге вариантик:
:loop
for /F «delims=» %%i IN (‘ping.exe -n 1 ya.ru’) DO @echo %%i | find «14мс » | nhcolor 0A»
for /F «delims=» %%i IN (‘ping.exe -n 1 ya.ru’) DO @echo %%i | find «16мс » | nhcolor 0C»
Goto :loop
красным цветом выводит если 16 секунд а зелёным если 14 и всё лишнее отсекает…
ах, да Спасибище за софтину и разъяснения…
В батниках не работает(
Например?
записал даже видео (выше, в статье или на ютубе https://youtu.be/2wAkPNpkrzM), в котором видно, что в bat файле программа nhcolor управляет цветом точно так же, как просто в командной строке.
Нужно батник запускать через командную строку. Если просто батник запустить, то вместо русских букв какие-то каракули.
x64 такой нету?
в winPE х64 она не работает, только х32, там нет режима совместимости, и для х64 нужна именно 64.
нет, не собирал под x64
Спасибо ОГРОМНОЕ.
Перечитал кучу форумов.
Именно Ваше решение мне подошло.
Спасибо за отзыв!
Рад, что программка оказалась полезна
куда устанавливать? в директорию system32?
в принципе, может быть любая директория. только может потребоваться прописать ее путь в переменную path.
я обычно устанавливаю,
— если требуется только для текущего пользователя, то в %userprofile%\AppData\local\nhutils
— если для всех пользователей, то в %ProgramFiles(x86)%\nhutils
При этом надо прописать этот путь в переменную path. См. Переменные среды в Windows 7.
можно и в system32 — тогда программа сразу будет доступна для всех пользователей и не надо будет прописывать путь в переменную path