如何更改 .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 位系统来说,这是一个很好的选择。您可以在任何屏幕位置打印任何颜色的任何文本: