Цвет для PROMPT (просто PROMPT) в cmd.exe и PowerShell? - PullRequest
22 голосов
/ 09 июня 2011

Так что в Bash вы просто настраиваете PS1, чтобы добавить цвета к вашему приглашению.Я говорю о самой подсказке, а не о цвете переднего плана (текста) или фона.И это действительно легко в Bash, и это очень помогает, если вам нужно найти свои команды в море грязного текстового вывода.

Можете ли вы добиться того же для cmd.exe или как запасной вариант для PowerShell?Цветная подсказка?

Я не знаю, можно ли это было сделать в старые времена до Win32, загрузив ANSI.SYS.Я думаю, что это было просто, чтобы сделать передний план и фон красочным.Но я могу ошибаться.И в любом случае, те времена прошли, и в наше современное время (я знаю) мы используем cmd.exe или PowerShell.

Я знаю, что и cmd.exe, и PowerShell способны к цветному выводу.Для cmd.exe просто запустите color /?, чтобы узнать.Но мой вопрос не о переднем плане и фоне, это все известно человечеству - речь идет просто об изменении цвета приглашения для cmd.exe, возможно, через переменную окружения PROMPT, как через переменную PS1 для Bash?Возможно ли это?

И нет, Cygwin не является альтернативой для этого.Я пользователь Cygwin с MinTTY и все, и мне это нравится.Но я все еще хочу, чтобы моя cmd.exe подсказка тоже была цветной.

Ответы [ 5 ]

15 голосов
/ 09 июня 2011

Вы можете добавить функцию подсказки в свой профиль в Powershell, чтобы делать с подсказкой все, что вы хотите.Например, что-то вроде этого:

function prompt
{
    Write-Host "PS $(get-location)>"  -nonewline -foregroundcolor Magenta
    return ' '
}

Чтобы открыть или создать свой профиль PowerShell, выполните следующее:

if(Test-Path $profile){notepad $profile}else{New-Item -path $profile -type file -force}
12 голосов
/ 10 июня 2011

перейдите по этой ссылке. Разработан взлом ANSI для оболочки CMD.exe

ссылка на ansi hack

Я попробовал это на моем Win 7 Professional SP1 и работает как шарм

enter image description here

5 голосов
/ 14 июля 2016

Это хорошая информация, но важная вещь, к которой я не обращал внимания, - как заставить настраиваемое приглашение появляться каждый раз, когда вы запускаете командную строку. В более старых версиях Windows, таких как XP и более ранние, вы поместили бы переменную среды PROMPT в файл AUTOEXEC.BAT, но в Windows 7 - Windows 10 вы бы сделали ее постоянной:

  • Откройте приглашение Run с помощью Windows key + R
  • Введите "systempropertiesadvanced" (без кавычек) и нажмите ENTER
  • Откроется диалоговое окно «Свойства системы» (вы также можете щелкнуть правой кнопкой мыши «Мой компьютер» и выбрать «Свойства», чтобы получить это)
  • Выберите вкладку «Дополнительно» вверху
  • Выберите «Переменные среды» внизу
  • В нижней области, в области «Системные переменные», посмотрите, есть ли у вас переменная с именем «Prompt» (заглавные буквы не имеют значения)
  • Если это так, отредактируйте переменную подсказки, и ваши изменения будут постоянными
  • Если нет, нажмите «Новый» внизу и в качестве имени переменной введите PROMPT и значение переменной, какой бы она ни была. Приглашение по умолчанию имеет значение переменной $ P $ G
  • Нажмите OK
  • Запустите командную строку для проверки
  • DONE
  • Примечание: я использую пользовательскую командную строку, которая выглядит как флаг Техаса. Значение переменной для этого: $e[1;44m*$e[41m▀▀$e[0;1m $P$G

(Белая полоса получается нажатием клавиши ALT и вводом 223 на клавиатуре справа. В этом приглашении есть два таких символа.)

2 голосов
/ 18 декабря 2013

Вы можете использовать несколько цветов (очень полезно для идентификации компонентов вашего приглашения, типично для Unix):

function prompt {
    Write-Host ("@") -NoNewLine -ForegroundColor Magenta
    Write-Host ("$env:COMPUTERNAME") -NoNewLine -ForegroundColor Green
    Write-Host (":") -NoNewLine -ForegroundColor Magenta
    Write-Host ($(Get-Location)) -NoNewLine -ForegroundColor Green
    Write-Host (">") -NoNewLine -ForegroundColor Red
    return " "
}

enter image description here

(COMPUTERNAME было явно написано здесь, но на самом деле оно заменяется значением переменной среды).

И вы можете добавить случайные цвета (взято из здесь ; этот имеет аналогичную версию; оба имеют другие очень интересные настройки):

function prompt
{
    $random = new-object random
    $color=[System.ConsoleColor]$random.next(1,16)
    Write-Host ("PS " + $(get-location) +">") -nonewline -foregroundcolor $color
    return " "
}
0 голосов
/ 28 марта 2019

Опираясь на ответ @ KriZ, escape-последовательности ANSI отлично работают в Windows 10 cmd.exe с 2019 года. Не нужно было явно вызывать ansi.sys или копировать какие-либо файлы.Он просто работал из коробки в Windows 10.

Например,

set PROMPT=$E[1;37m[user@machine:$E[1;35m$P ]$$ $E[1;37m

Производит:

example colored prompt

(обратите внимание на пробел после последнего $)

Все, что находится перед диском, выделено жирным белым, а диск / папка - жирным розовым, а все, что после финального $, выделено жирным белым.

Формат для цветов:

$E[bold_or_not;colorm

, где m всегда следует за номером цвета.bold_or_not = 0 или 1. Вот руководство по цветам:

0 Отключить атрибуты 1 Высокая интенсивность 2 Нормальная интенсивность 4 Подчеркивание (только моно) 5 Мигание 7 Обратное видео 8 Невидимый 30 Черный 31 Красный 32Зеленый 33 Желтый 34 Синий 35 Пурпурный 36 Голубой 37 Белый 40 Черный 41 Красный 42 Зеленый 43 Желтый 44 Синий 45 Пурпурный 46 Голубой 47 Белый

Цвета Источник: https://kb.iu.edu/d/aamm

...