Как изменить цвет текста в the bat

Обновлено: 05.07.2024

Предлагаю к рассмотрению две функции, основанные на базе утилиты findstr, которые позволяют выводить текст заданного цвета:

Выведет "Hello, World" красным цветом на зеленом фоне.

Особенности:
1. Цвет задается аналогично команде color, т.е. цвет фона и текста двумя шестнадцатеричными цифрами.
2. Учитывая то, что цветным выводится имя файла, далеко не любой текст можно вывести этим методом. Текст должен быть корректным с точки зрения составления имени файла.
3. В каталоге %TEMP% создается и затем удаляется временный подкаталог.
4. В конце строки можно вывести двоеточие, хотя оно не может присутствовать в имени файла. Для этого надо установить любое значение в качестве третьего параметра функции.
5. Пробелы в конце строки съедаются, в начале строки сохраняются.
6. В строках длинной 78 и 79 символов при выводе в конце может добавиться двоеточие и точка, т.е. если строка подходит к концу экрана.

Пример с двоеточием:

В таком примере:

В конце строки будет выведено двоеточие зеленого цвета и точка обычного цвета.

Полноценный пример и реализация функций в аттаче, т.к. имеются непечатные символы.

http://s019.radikal.ru/i605/1301/11/f1fa003d5d50.jpg

color.cmd 1.32 kb, 185 downloads since 2013-01-05

You don't have the permssions to download the attachments of this post.

2 Ответ от wisgest 2013-01-05 13:14:58 (изменено: wisgest, 2013-10-23 23:39:16)

  • wisgest
  • Разработчик
  • Неактивен











В целом хорошо, идея ясно выражена — можно в Коллекцию (23.10.2013: сделано) в теперяшнем виде.

Но я попридираюсь:
0) неплохо, если бы в примере присутствовал также вывод с другим цветом фона;
1) если рассматривать работу в полевых условиях, то:
1.1) «

tempFolder» — слишком осмысленное название, велика вероятность попадания;
1.2) могут отсутствовать права на запись в текущую папку; для подобных целей предназначена %TEMP%
1.3) в экстремальных условиях

(которые не учитываются в большинстве скриптов использующих вспомогательные временные файлы) потерпит неудачу.

3 Ответ от Arigato 2013-01-05 15:21:13 (изменено: Arigato, 2013-01-05 15:36:39)

  • Arigato
  • Разработчик
  • Неактивен

На счет %TEMP% тоже думал. Изменил первый пост.

4 Ответ от wisgest 2013-01-05 20:45:54

  • wisgest
  • Разработчик
  • Неактивен











Почему так замысловато

(Почему не PUSHD, POPD или хотя бы CD /D?)

5 Ответ от Arigato 2013-01-05 21:43:52

  • Arigato
  • Разработчик
  • Неактивен

Переделал и обновил первый пост (аттач).

6 Ответ от wisgest 2013-01-05 23:58:29 (изменено: wisgest, 2013-01-06 00:13:10)

  • wisgest
  • Разработчик
  • Неактивен











всё-таки не поможет при одновременном запуске нескольких экземпляров, т.к ни %RANDOM%, ни %TIME% не обеспечивают неповторяемость значений.
Лично я переписал бы это на пару строк длиннее, зато более непробиваемо:

(последние две строки можно переписать короче:

Для проверки можно попробовать запустить командый файл в нескольких окнах одновременно

для обоих случаев.

7 Ответ от wisgest 2013-01-06 03:26:15

  • wisgest
  • Разработчик
  • Неактивен











можно сократить на два шага:

8 Ответ от Arigato 2013-01-06 14:26:27 (изменено: Arigato, 2013-01-06 14:27:49)

  • Arigato
  • Разработчик
  • Неактивен

Неплохо. Ну а если вместо x использовать random:

Проблем вроде бы не должно быть.

P.S. На счет меток хотелось бы уточнить. Метка "write.TRY_MD" - 12 символов. Ограничение длинны метки в 8 символов еще действует или это было в старых версиях cmd?

9 Ответ от wisgest 2013-01-06 19:26:52

  • wisgest
  • Разработчик
  • Неактивен











Ну а если вместо x использовать random:
Проблем вроде бы не должно быть.

Скорее всего, не должно; просто лично у меня предубеждение против повторных обращений при неудаче к датчику псевдослучайных чисел, т.к. чисто теоретически при определённых условиях может произойти его зацикливание.

Ограничение длинны метки в 8 символов еще действует или это было в старых версиях cmd?

10 Ответ от Arigato 2013-01-07 00:51:57 (изменено: Arigato, 2013-01-07 00:52:19)

  • Arigato
  • Разработчик
  • Неактивен

11 Ответ от wisgest 2013-01-07 01:46:55 (изменено: wisgest, 2013-01-07 01:47:14)

  • wisgest
  • Разработчик
  • Неактивен











Я знаю, что написано, но воспроизвести отбрасывание «лишних» знаков, как и метки с пробелами, что-то не получается.

Читайте также: