我可以自定义 Windows 7 命令提示符以仅为某些消息添加颜色吗?

我可以自定义 Windows 7 命令提示符以仅为某些消息添加颜色吗?

我正在运行一些自动化测试,在调试时,信息在 Windows 命令提示符终端中滚动。测试用例结果以 或 开头oknot ok有什么方法可以让not ok消息以红色显示吗?

我宁愿定制 Windows 终端,也不愿摆弄测试自动化架构。

答案1

在命令控制台中获取选择性颜色输出很困难。在 DOS 时代,您可以通过 ANSI.SYS 使用 ANSI 转义码。但这在现代 Windows 机器上不起作用(绝对不是 64 位机器,甚至可能不是 32 位机器)

您可以使用 PowerShell 以彩色输出单行。例如:

powershell write-host -foregroundcolor Red "Hello world"

但是上下文切换非常慢。

还有一些批处理文件黑客使用 FINDSTR 选择性地输出彩色字符串。请参阅如何在 Windows 命令行中使用不同的颜色回显

但上述两种技术都要求您在生成内容时提供颜色。但您希望在文本生成后有选择地为文本着色。

当然没有任何原生实用程序可以满足您的需求。也许有第三方工具可以搜索 stdin 并以红色突出显示匹配项,但我对任何工具都不熟悉。

除了使用颜色,您还可以考虑重新格式化包含相关字符串的每一行。例如,匹配的行可以加上类似这样的字符串作为前缀>>>>>>>>>>。要实现这一点,您需要两样东西:1) 基于正则表达式行的搜索和替换实用程序,2) 将测试结果传输到实用程序的能力。

我写过混合 JScript/批处理实用程序,称为 REPL.BAT。它在 stdin 上执行正则表达式搜索和替换,并将结果写入 stdout。该实用程序是纯脚本,因此不需要第三方可执行文件。它可以在 XP 及以上版本的任何 Windows 机器上运行。完整文档内置于脚本中。

假设 REPL.BAT 位于您当前的目录中,或者更好的是,位于您的 PATH 中的某个位置:

yourAutomatedTestCommand | repl ".*\bnot ok\b.*" ">>>>>>>>>> $&" i

上述命令将仅修改not ok单词边界处包含 (不区分大小写) 的行。有许多选项可用于重新格式化感兴趣的行。例如,可以使用选项X\n换行符转义序列结合使用,在行之前和之后添加整行。

相关内容