【问题标题】:Color for the PROMPT (just the PROMPT proper) in cmd.exe and PowerShell?cmd.exe 和 PowerShell 中的 PROMPT(只是正确的 PROMPT)的颜色?
【发布时间】:2011-06-09 17:47:44
【问题描述】:

因此,在 Bash 中,您只需配置 PS1 即可为提示添加颜色。我说的是正确的提示,而不是前景(文本)或背景的颜色。这在 Bash 中真的很简单,如果您需要在大量混乱的文本输出中找到您的命令,它会很有帮助。

您能否为cmd.exe 实现相同的目标,或者作为 PowerShell 的后备方案?彩色提示?

我不知道在Win32之前的过去是否可以通过加载ANSI.SYS来完成。我认为那只是为了使前景和背景变得丰富多彩。但我可能错了。无论如何,那些日子已经一去不复返了,在我们现代(我知道),我们正在使用 cmd.exe 或 PowerShell。

我知道 cmd.exe 和 PowerShell 都能够进行彩色输出。对于 cmd.exe,只需运行color /? 即可查看。但我的问题不是关于前景和背景,这对人类来说都是众所周知的——它只是改变 cmd.exe 的提示颜色,可能是通过 PROMPT 环境变量作为 Bash 的 PS1 变量?有可能吗?

不,Cygwin 不是这个的替代品。我是使用 MinTTY 的 Cygwin 用户,我喜欢它。但我仍然希望我的cmd.exe 提示也有颜色。

【问题讨论】:

    标签: powershell command-prompt prompt cmd


    【解决方案1】:

    您可以在 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}
    

    【讨论】:

    • 你应该至少返回空间。否则 PowerShell 将在末尾附加“PS>”。
    • 谢谢 - 在完成 Set-ExecutionPolicy RemoteSigned 之后效果很好(为简单起见)。但是在没有对 PowerShell 怎么可能进行大量搜索的情况下,我确信它是可能的。另一方面,cmd.exe 的 ANSI hack,太耸人听闻了! :-)
    【解决方案2】:

    点击此链接。为 CMD.exe shell 开发了一个 ANSI hack

    link to ansi hack

    我已经在我的 win 7 专业版 SP1 上尝试过,效果很好

    【讨论】:

    • 太棒了,谢谢!我也让它工作了。 readme.txt 中的说明很好,只是缺少一件事:在 64 位系统上,您必须将两个 DLL - AnsiSupport.dllDllSpoof.dll - 复制到 C:\Windows\SysWOW64 文件夹而不是 C:\Windows\system32 文件夹。 (Be sure to read up on the folder trickery unless you know!) 我的系统就是这种情况 - Win7 Pro 64 位。现在工作正常且色彩丰富 - 再次感谢,这太棒了
    • CAVEAT:这不是 1:1 替换加 ANSI 颜色。虽然大部分时间没有问题,但有些事情可能会停止工作。我遇到的一个例子是powercfg.exe 实用程序。 32 位 ANSI hack 将在 C:\Windows\SysWOW64(32 位)中提取内容,而在 C:\Windows\System32(64 位)中的原始内容。对于powercfg,这确实有很大的不同。 32 位版本不会告诉我为什么我的电脑会醒来。一定要记住这一点,以免被咬。
    • cmd.exe窗口右上角的这两个非标准的附加按钮是什么?
    • 这些是 Ultramon 的附加按钮。几年前买了那个许可版本,没有它就活不下去了。这些按钮允许任何窗口(包括 cmd)通过单击它们被拉伸或移动到另一个屏幕。这与“每个屏幕都有自己的任务栏”相结合,使其成为双屏或三屏用户的必备品。
    • 在 Win 10 ansi 颜色上开箱即用,没有任何黑客攻击
    【解决方案3】:

    基于 @KriZ 的回答,ANSI 转义序列在 2019 年的 Windows 10 cmd.exe 中完美运行。不需要显式调用 ansi.sys 或复制任何文件。它在 Windows 10 中开箱即用。

    例如,

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

    生产:

    (注意最后$后面的空格)

    驱动器之前的所有内容都以粗体白色着色,驱动器/文件夹为粗体粉红色,而最后的 $ 之后的所有内容都是粗体白色。

    颜色的格式是:

    $E[bold_or_not;colorm
    

    m 总是跟在颜色编号后面。 bold_or_not = 0 或 1。以下是颜色指南:

    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
    

    颜色来源:https://kb.iu.edu/d/aamm

    【讨论】:

    • 需要注意的是 $E[x;y;zm 似乎支持两个以上的项目。能够选择颜色可能比我在上面的帖子中想象的要多一些细微差别。
    • PROMPT $E[1;36m[%username%@%computername%]:$E[1;35m$P$G$S$E[1;37m
    【解决方案4】:

    这些都是很好的信息,但我没有看到的重要一点是如何在每次运行命令提示符时显示自定义提示符。在较旧的 Windows(例如 XP 及之前)中,您可以将 PROMPT 环境变量放在 AUTOEXEC.BAT 文件中,但在 Windows 7 到 Windows 10 中,您可以将其永久化,如下所示:

    • 使用 Windows key + R 打开 Run 提示符
    • 输入“systempropertiesadvanced”(不带引号)并点击ENTER
    • 这将打开系统属性对话框(您也可以右键单击我的电脑并选择属性来获取)
    • 选择顶部的“高级”选项卡
    • 选择靠近底部的“环境变量”
    • 在下方区域的“系统变量”区域中,查看您当前是否有一个名为“提示”的变量(大写无关紧要)
    • 如果是这样,请编辑提示变量并将您的更改永久化
    • 如果没有,请单击底部附近的“新建”,对于变量名称,输入 PROMPT 并为变量值输入任何您想要的值。默认提示的变量值为 $P$G
    • 点击确定
    • 运行命令提示符进行测试
    • 完成
    • 注意:我使用了一个自定义的命令提示符,它看起来像德克萨斯州的标志。变量值是: $e[1;44m*$e[41m▀▀$e[0;1m $P$G

    (白色条是通过按住ALT键并在右边的小键盘上输入223形成的。这个提示中有两个这样的字符。)

    【讨论】:

    • 好吧,这太棒了。
    【解决方案5】:

    您可以使用多种颜色(对于识别提示的组件非常有用,在 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 明确写在这里,但它实际上被环境变量的值替换)。

    您可以添加随机颜色(取自herethis 有类似的版本;两者都有其他非常有趣的调整):

    function prompt
    {
        $random = new-object random
        $color=[System.ConsoleColor]$random.next(1,16)
        Write-Host ("PS " + $(get-location) +">") -nonewline -foregroundcolor $color
        return " "
    }
    

    【讨论】:

      猜你喜欢
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      • 1970-01-01
      相关资源
      最近更新 更多