在Windows下打印带有颜色的字符串

13 浏览
0 Comments

在Windows下打印带有颜色的字符串

我知道color bf命令可以设置整个命令行窗口的颜色,但我想要在单独的一行中以不同的颜色打印。

0
0 Comments

在Windows操作系统下,有时候我们需要在命令行中打印带有不同颜色的字符串。下面是一个自编译的.bat/.net混合文件,可以在已安装.NET框架的任何系统上使用。它使用jscript.net编译器创建一个可打印具有不同背景/前景颜色的字符串的可执行文件,仅适用于当前行。

这个脚本中使用了一些JScript和.NET的语法和函数,用于处理命令行参数、打印帮助信息、设置颜色等操作。它首先检查系统是否已安装.NET框架,然后通过jscript.net编译器创建一个可执行文件,最后根据命令行参数设置输出的字符串颜色。

脚本中还包含了一个printHelp函数,用于打印帮助信息,包括脚本的使用方法以及可选的参数。它还提供了一个示例命令,用于演示如何使用脚本来打印带有特定颜色的字符串。

这个脚本的出现原因是为了满足在Windows命令行中打印带有不同颜色的字符串的需求。解决方法是使用JScript和.NET的混合编程技术,通过编译器创建一个可执行文件,并通过命令行参数设置字符串的颜色。这种方法非常巧妙和灵活,可以满足用户对颜色输出的个性化需求。

你可以在这里找到这个脚本的详细代码和使用说明:https://github.com/npocmaka/batch.scripts/blob/master/hybrids/.net/coloroutput.bat

这个脚本的还有另一个打印颜色的函数,可以在这里查看更多信息:http://www.dostips.com/forum/viewtopic.php?f=3&t=4453

这个脚本使用了混合编程技术,通过编译器创建一个可执行文件,实现在Windows命令行中打印带有不同颜色的字符串的功能。这种方法非常有创意和灵活,可以满足用户对颜色输出的个性化需求。

0
0 Comments

在Windows中打印带有颜色的字符串

我想要以不同的颜色打印一行字符串。

可以使用ANSI转义序列。

Windows 10之前 - 控制台上没有原生支持ANSI颜色

对于Windows 10之前的版本,Windows命令控制台默认不支持输出颜色。您可以安装Cmder、ConEmu、ANSICON或Mintty(默认在GitBash和Cygwin中使用)来为Windows命令控制台添加颜色支持。

Windows 10及之后 - 命令行颜色

从Windows 10开始,Windows控制台默认支持ANSI转义序列和一些颜色。该功能随着2015年11月的Threshold 2更新一起发布。

更新(05-2019):ColorTool可以更改控制台的颜色方案。它是Microsoft Terminal项目的一部分。

演示

批处理命令

win10colors.cmd由Michele Locati编写:

off

cls

echo [101;93m STYLES [0m

echo ^[0m [0mReset[0m

echo ^[1m [1mBold[0m

echo ^[4m [4mUnderline[0m

echo ^[7m [7mInverse[0m

echo.

echo [101;93m NORMAL FOREGROUND COLORS [0m

echo ^[30m [30mBlack[0m (black)

echo ^[31m [31mRed[0m

echo ^[32m [32mGreen[0m

echo ^[33m [33mYellow[0m

echo ^[34m [34mBlue[0m

echo ^[35m [35mMagenta[0m

echo ^[36m [36mCyan[0m

echo ^[37m [37mWhite[0m

echo.

echo [101;93m NORMAL BACKGROUND COLORS [0m

echo ^[40m [40mBlack[0m

echo ^[41m [41mRed[0m

echo ^[42m [42mGreen[0m

echo ^[43m [43mYellow[0m

echo ^[44m [44mBlue[0m

echo ^[45m [45mMagenta[0m

echo ^[46m [46mCyan[0m

echo ^[47m [47mWhite[0m (white)

echo.

echo [101;93m STRONG FOREGROUND COLORS [0m

echo ^[90m [90mWhite[0m

echo ^[91m [91mRed[0m

echo ^[92m [92mGreen[0m

echo ^[93m [93mYellow[0m

echo ^[94m [94mBlue[0m

echo ^[95m [95mMagenta[0m

echo ^[96m [96mCyan[0m

echo ^[97m [97mWhite[0m

echo.

echo [101;93m STRONG BACKGROUND COLORS [0m

echo ^[100m [100mBlack[0m

echo ^[101m [101mRed[0m

echo ^[102m [102mGreen[0m

echo ^[103m [103mYellow[0m

echo ^[104m [104mBlue[0m

echo ^[105m [105mMagenta[0m

echo ^[106m [106mCyan[0m

echo ^[107m [107mWhite[0m

echo.

echo [101;93m COMBINATIONS [0m

echo ^[31m [31mred foreground color[0m

echo ^[7m [7minverse foreground ^<--^> background[0m

echo ^[7;31m [7;31minverse red foreground color[0m

echo ^[7m and nested ^[31m [7mbefore [31mnested[0m

echo ^[31m and nested ^[7m [31mbefore [7mnested[0m

A. Koch - 这在我的Windows 10控制台(cmd)中无法工作。

这很奇怪,但是这是一个本地问题。1)确保您使用的是带有Threshold 2更新(2015年11月)的Windows 10。这是颜色支持所需的。(它正在运行。刚刚使用Version 10.0.14393测试通过。)--- 2)您将内容保存到文件colors.cmd中并运行它,对吗?

A. Koch 1)我使用的是Windows 10 Pro,版本1607,OS Build 14393.693 2)我有.bat文件而不是.cmd文件 - 我可以使用.bat而不是.cmd吗?

好的。感谢您的反馈。.cmd或.bat - 两者都应该可以工作。但是,我认为我知道为什么它不起作用:似乎在发布到StackOverflow时删除了转义符号。请不要从我的回答中复制内容,而是在这里使用内容:gist.githubusercontent.com/mlocati/...

A. Koch 是的,你是对的-现在它可以工作了,非常感谢!

我以前从未在Notepad++中生成过ESC...您可以使用数字键盘和左侧ALT键使用ALT代码来完成:L-ALT+0+2+7

顺便说一句,作为一个每天制作和使用大量批处理的人,这个答案以美学的方式增强了我的整体工具集!使用VB?肯定不行。这是最佳选择!

您可以通过以下方式在批处理文件中生成ESC字符:for /F %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a"

在更新的Windows 10版本中似乎不再起作用了...stackoverflow.com/q/44047988/985454

在Creator's Update中仍然起作用,但是某个更新似乎导致了一个错误,如果它是一个已使用脚本,则可能更难触发。根据您计划支持的Shell不同,您可能需要开始使用一个shim或者使用额外的开关调用您的脚本来解决颜色问题。我遇到了类似的问题:stackoverflow.com/a/45449530/3543437

. Koch 这太棒了。但是我在for循环中运行它时遇到了一个问题。只有第一个echo正确着色,之后所有其他的echo只是打印出所有的转义字符,而不改变任何内容。批处理文件是将每个文件夹归档到单独的存档中,尝试以粗体输出文件夹名称,然后是带有findstr过滤的归档器标准输出。

您可以在不创建新行的情况下更改颜色:echo | set /p="ESCAPECHARACTER[91m"

执行我的脚本(一个*.cmd文件)时,转义序列仅适用于第一个echo语句。之后,esc字符以未知字符符号呈现,连同转义序列的其余部分,并且不处理该序列。生成转义的方法与使用Notepad++和Alt+0Alt+2Alt+7的键序列一样有效。我猜控制台窗口的终端仿真存在一个bug。

_onDeck 感谢您发布了一个在Notepad++中插入ESC的解决方法。对我来说有点麻烦,我认为NUM锁定状态很重要(但是我的Microsoft键盘没有LED显示其状态,所以不能说哪种状态有效!)。

在我的for循环中,第一个echo工作正常,但是后续的迭代中,转义字符显示为特殊字符,小写字母P或矩形框中的问号:(

检查这个gist。您可能需要使用alt代码手动替换特殊字符,是的,使用数字键盘并且只使用数字键盘上的数字是有关系的:gist.github.com/the-nose-knows/fdccf686c5d017094fa76e805b2b05d6

您能解释一下您的命令调用是如何工作的吗?我不明白列表的内容是如何评估为转义字符的。

:恐怕我不明白您在指什么...什么“命令调用”?什么“列表的内容”?您是指这个评论吗?

是的,我指的是那个评论。不过没关系,我现在理解了。

嗨Jens,我可以更新您的问题并附上一个显示所有可用颜色代码的图像吗:imgur.com/a/EuNXEar,以及创建它的脚本:gist.github.com/gerib/f2562474e7ca0d3cda600366ee4b8a45

0
0 Comments

问题的出现原因:

在Windows操作系统下,使用批处理或命令提示符脚本打印带有颜色的字符串时,不容易实现。在提供的解决方案中,使用了Powershell来实现这一功能。

解决方法:

可以通过调用Powershell命令来实现在Windows下打印带有颜色的字符串。原始的解决方案是通过创建一个批处理脚本,然后在脚本中调用Powershell命令来实现。但是,在后续的编辑中,提供了更简化的方法,可以直接在命令提示符中使用Powershell命令来实现。

示例:

以下是一个示例,展示了如何使用Powershell命令在Windows下打印带有颜色的字符串:

powershell write-host -fore Cyan This is Cyan text
powershell write-host -back Red This is Red background

更多信息:

可以在Powershell的文档中找到完整的颜色列表以及更多信息。可以通过以下链接访问Powershell的文档:

- PowerShell Documentation for `Write-Host`: [链接](https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/write-host)

在Windows操作系统下,要实现在命令提示符或批处理脚本中打印带有颜色的字符串并不容易。但是可以通过调用Powershell命令来实现。在提供的解决方案中,展示了如何使用Powershell命令来实现在Windows下打印带有颜色的字符串,并提供了更简化的方法来实现这一功能。

0