Reputation: 15274
So in Bash you just configure PS1
to add colors to your prompt. I'm talking about the prompt proper, not the color of the foreground (text) or the background. And it's really easy in Bash and it helps a lot if you need to find your commands in a sea of messy text output.
Can you achieve the same for cmd.exe
, or as a fallback, for PowerShell? A colored prompt?
I don't know if it could be done in the old days before Win32 by loading ANSI.SYS
. I think that was just to make the foreground and the background colorful. But I might be wrong. And anyway, those days are gone, and in our modern times (I know), we're using cmd.exe
, or PowerShell.
I know both cmd.exe and PowerShell are capable of colored output. For cmd.exe, just run color /?
to find out. But my question is not about the foreground and the background, that's all known to humankind - it's about just changing the prompt color for cmd.exe, probably via the PROMPT
environment variable as via the PS1
variable for Bash? Is it possible?
And no, Cygwin is not an alternative for this. I'm a Cygwin user with MinTTY and all, and I love it. But I still want my cmd.exe
prompt colored, too.
Upvotes: 26
Views: 19485
Reputation: 1791
Thanks to all existing answers, this is my command prompt (if you like it, you can use it)
$E[7;33m$P$_$E[0;37m[$E[0;32m%username%@%computername%$E[0;36m$S$D$S$T$H$H$H$E[0;37m]$$$E[0;37m$S
Just need to add a User Variable PROMPT
with the above value
Output:
Upvotes: 0
Reputation: 344
Building on @KriZ's answer, the ANSI escape sequences work perfectly in Windows 10 cmd.exe
as of 2019. Didn't need to explicitly call out ansi.sys
or copy any files. It just worked out of the box in Windows 10.
For example,
set PROMPT=$E[1;37m[user@machine:$E[1;35m$P ]$$ $E[1;37m
Produces:
(Notice the space after the final $
)
Everything before the drive is colored in bold white and the drive/folder is bold pink, and everything after the final $
is bold white.
The format for the colors is:
$E[bold_or_not;colorm
With m always following the color number. bold_or_not = 0 or 1. Here's a guide for the colors:
0 Turn Off Attributes 1 High Intensity 2 Normal Intensity 4 Underline (mono only) 5 Blink 7 Reverse Video 8 Invisible 30 Black 31 Red 32 Green 33 Yellow 34 Blue 35 Magenta 36 Cyan 37 White 40 Black 41 Red 42 Green 43 Yellow 44 Blue 45 Magenta 46 Cyan 47 White
Colors Source: https://kb.iu.edu/d/aamm
Upvotes: 15
Reputation: 61
This is all good information but an important thing that I didn't see addressed is how to make the custom prompt appear each time you run a command prompt. In older Windows, such as XP and before, you would put the PROMPT environment variable in the AUTOEXEC.BAT
file but in Windows 7 through Windows 10, you would make it permanent as follows:
Run
prompt by using the Windows key + R
ENTER
$e[1;44m*$e[41m▀▀$e[0;1m $P$G
(The white bar is made by holding down ALT and typing 223 on the keypad on the right. There are two of these characters in this prompt.)
Upvotes: 6
Reputation: 37740
You can add a Prompt function to your profile in Powershell to pretty much do whatever you want with the prompt. So for instance something like this:
function prompt
{
Write-Host "PS $(get-location)>" -nonewline -foregroundcolor Magenta
return ' '
}
To open or create your PowerShell profile, run this:
if(Test-Path $profile){notepad $profile}else{New-Item -path $profile -type file -force}
Upvotes: 17
Reputation: 15561
You can use multiple colors (very useful for identifying components of your prompt, typical in 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 " "
}
(COMPUTERNAME
was explicitly written here, but it actually gets replaced by the value of the environment variable).
And you can add random colors (taken from here; this has a similar version; both have other very interesting tweaks):
function prompt
{
$random = new-object random
$color=[System.ConsoleColor]$random.next(1,16)
Write-Host ("PS " + $(get-location) +">") -nonewline -foregroundcolor $color
return " "
}
Upvotes: 2
Reputation: 682
follow this link. There's an ANSI hack developped for the CMD.exe shell
I've tried it on my win 7 professional SP1 and works like a charm
Upvotes: 14