批处理文件改变文本特定部分的颜色

批处理文件改变文本特定部分的颜色

如何更改 .bat 文件中特定文本部分的颜色?我目前有这个:

@echo off
:a
color 2
set /p command=$jp 
goto :%command%

生成绿色的“$jp”。但是,我之后输入的文本也是绿色的,我希望只有“$jp”是绿色的,而我输入的内容是白色的。color F

答案1

正如 dbenham 的评论所指出的,StackOverflow 的如何在批处理文件中包含多种颜色?

回顾一下那个问题,它是关于 Windows 7 的。那里的答案都需要额外的软件,或者使用一些批处理文件技术,这些技术看起来……有点复杂。

但是,这个问题没有标记操作系统,我想添加与较新的操作系统相关的新信息。Windows 10 增加了对 ANSI 转义序列的支持。

ANSI 转义序列的优点在于,从概念上讲,使用它们非常简单。您只需使用 ANSI 颜色转义序列(例如记录在Rob van der Woude 的 ANSI 颜色页面) 并将其包含在 ECHO 语句中。

不幸的是,由于处理第 27 个 ASCII 字符,使用这些序列确实变得有点困难。

现在,使用 ANSI 转义序列的技巧是将第 27 个 ASCII 字符发送到屏幕。这很棘手的原因是因为最常与 ASCII 27 相关的键盘键是键Esc。(这是这些 ANSI 转义序列通常被称为“转义”序列的主要原因。)并且许多软件都对该Esc键有特殊支持。这种特殊支持通常会妨碍轻松发送纯 ASCII 字符编号 27。

很多时候,人们会通过将第 27 个字符存储在文件中,然后根据需要复制粘贴该字符来解决这个问题。然后,制作包含大量 ANSI 序列的文件需要多次使用第 27 个 ASCII 字符,这可能可以通过复制粘贴来实现。

但是,还有更好的方法。只需将 ASCII 字符放入文件一次,然后将其放入环境变量中。这在 Windows 10 中效果很好(据我所知,在 UNIX 终端中也是如此)。然后您只需引用该环境变量即可。

我设法使用制作了一个批处理文件。下面进一步提到的批处理文件只是设置了一个名为 ASCII 27 的变量来包含该字符。

此外,您还可以创建环境变量。因此,不要像这样:

echo %ASCII27%[31m Lava %ASCII27%[37m Cyan/Aqua/Teal text %ASCII27%[33m Sun
echo %ASCII27%[34m Water %ASCII27%[37m Sky %ASCII27%[33m Sun

您可以使用:

SET ANSIREDFG=%ASCII27%[31m
SET ANSICYANFG=%ASCII27%[37m
SET ANSIYELLOWFG=%ASCII27%[33m
SET ANSIBLUEFG=%ASCII27%[34m
echo %ANSIREDFG% Lava %ANSICYANFG% Cyan/Aqua/Teal text %ANSIYELLOWFG% Sun
echo %ANSIBLUEFG% Water %ANSICYANFG% Sky %ANSIYELLOWFG% Sun

看起来可能不会短很多。这样做的好处不一定是让文件更漂亮,而是你可以使用更友好的名称(由你决定),比如%ANSIBLUEFG%使用蓝色作为前景色,而不需要记住哪种颜色与哪个数字相关。这样输入和调试的速度可能会快得多(如果你没有记住颜色编号)。

我创建了一个 ZIP 文件,其中包含:

  • OUT.ANS:一个用于展示此内容的 ANSI 文件示例,每行包含多种颜色布局
  • ANICOL.BAT:用于创建该 ANSI 文件的批处理文件,演示了变量名的使用,而不是频繁使用数字引用颜色编号,
  • ASCII27.BAT:创建包含转义序列的 ASCII27 变量

此 ZIP 文件位于Windows 10 ANSI 演示,版本 1。该批处理文件可以很好地与 Windows 10 配合使用。由于使用了“ %^%”,它在某些较旧的操作系统中可能无法很好地工作(但如果将“%^%”替换为“% %”,则可能会按预期工作)。

如果您不想弄乱环境变量,您可以尝试直接从 out.ans 文件复制并粘贴代码(如果您的文本编辑器没有破坏 ASCII 27 字符,这可能会非常有效)。

答案2

试试这个脚本。对于 32 位系统来说,这是一个很好的选择。您可以在任何屏幕位置打印任何颜色的任何文本:

http://pastebin.com/bzYhfLGc

相关内容