1

Как я могу изменить цвет определенной части текста в файле .bat? В настоящее время у меня есть это:

@echo off
:a
color 2
set /p command=$jp 
goto :%command%

который производит зеленый "$ jp". Текст, который я набираю после этого, hovewer тоже зеленый, я бы хотел, чтобы только «$ jp» был зеленым, а то, что я ввожу, было белым, например. color F

2 ответа2

2

Как отмечается в комментарии dbenham, это обсуждается в StackOverflow о том , как иметь несколько цветов в пакетном файле?

Рассматривая этот вопрос, речь идет о Windows 7. Ответы там все требуют дополнительного программного обеспечения или использования некоторых методов пакетного файла, которые выглядят ... немного сложными.

Однако этот вопрос не помечен операционной системой, и я хотел бы добавить новую информацию, относящуюся к более новой операционной системе. В Windows 10 добавлена поддержка последовательностей ANSI Escape.

Прелесть escape-последовательностей ANSI в том, что их использование концептуально просто. Вам просто нужно использовать экранирующие последовательности ANSI (как описано на странице Роба ван дер Вуде в ANSI Color) и включить их в оператор ECHO.

К сожалению, использование этих последовательностей становится немного сложнее из-за обработки 27-го символа ASCII.

Теперь хитрость в использовании последовательностей ANSI Escape заключается в отправке 27-го символа ASCII на экран. Причина в том, что это сложно, потому что клавиша клавиатуры, которая чаще всего связана с ASCII 27, является клавишей Esc . (Это основная причина, по которой эти Escape-последовательности ANSI часто называют «escape-последовательностями».) И многие программы имеют специальную поддержку клавиши Esc . Эта специальная поддержка часто мешает простой отправке простого символа ASCII номер 27.

Много раз люди обходили это, сохраняя 27-й символ в файле, и просто копировали и вставляли символ по мере необходимости. Затем создание файла с большим количеством последовательностей ANSI предполагает использование 27-го символа ASCII несколько раз, что может быть выполнено с использованием копирования и вставки.

Тем не менее, есть лучший подход. Просто вставьте символ ASCII в файл один раз и поместите его в переменную окружения. Это хорошо работает в Windows 10 (и, как я прочитал, терминалы UNIX). Тогда вы можете просто обратиться к этой переменной среды.

Мне удалось сделать командный файл с помощью ssed. Пакетный файл, упомянутый ниже, просто устанавливает переменную с именем ASCII 27, которая будет содержать этот символ.

Кроме того, вы можете создавать переменные среды. Итак, вместо чего-то вроде:

echo %ASCII27%[31m Lava %ASCII27%[37m Cyan/Aqua/Teal text %ASCII27%[33m Sun
echo %ASCII27%[34m Water %ASCII27%[37m Sky %ASCII27%[33m Sun

Ты можешь использовать:

SET ANSIREDFG=%ASCII27%[31m
SET ANSICYANFG=%ASCII27%[37m
SET ANSIYELLOWFG=%ASCII27%[33m
SET ANSIBLUEFG=%ASCII27%[34m
echo %ANSIREDFG% Lava %ANSICYANFG% Cyan/Aqua/Teal text %ANSIYELLOWFG% Sun
echo %ANSIBLUEFG% Water %ANSICYANFG% Sky %ANSIYELLOWFG% Sun

Это может не выглядеть намного короче. Преимущество здесь не обязательно делает файл более красивым, но вы можете использовать более дружественные имена (которые вы выбираете ), такие как %ANSIBLUEFG% чтобы использовать СИНИЙ в качестве цвета переднего плана , вместо того, чтобы запоминать, какой цвет связан с каким числом. Это может быть намного быстрее для ввода и отладки (если вы не запомнили номера цветов).

Я создал ZIP-файл, содержащий:

  • OUT.ANS: образец файла ANSI, чтобы показать это, содержащий несколько цветовых схем на строку
  • ANSICOL.BAT: командный файл, который использовался для создания этого файла ANSI, демонстрирующий использование имен переменных вместо частых числовых ссылок на номера цветов,
  • ASCII27.BAT: создает переменную ASCII27, содержащую escape-последовательность

Этот ZIP-файл находится в демонстрационной версии ANSI Windows 10, версия 1. Пакетный файл был создан, чтобы хорошо работать с Windows 10. Из-за использования « %^% » это может работать не так чудесно в некоторых старых операционных системах (но, вероятно, будет работать так, как ожидается, если заменить «% ^%» на «%%»).

Если вам не хочется возиться с переменными окружения, попробуйте просто скопировать и вставить коды прямо из файла out.ans (что может работать на удивление хорошо, если ваш текстовый редактор не повреждает символ ASCII 27).

0

Попробуйте этот скрипт. Это хороший вариант для 32-битных систем. Вы можете напечатать любой текст любым цветом в любой позиции экрана:

http://pastebin.com/bzYhfLGc

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .