如何格式化带格式代码的字符串,以便为windows cmd设置格式化字符串?
所以基本上我有一个像ViewControllers
这样的字符串。
当我将其输出到cmd时,它应显示为~b~Hello World~r~
。
据我所知,cmd有一些Unicode字符可以更改以下文本格式,但我不记得它们(类似于<blue from here on>Hello World<reset to normal>
)
所以我想的是:
\u00234
答案 0 :(得分:2)
我认为你在谈论ANSI转义码。您可以阅读here。
基本上你只需将ESCAPE字符('\ x1b'可用)发送到控制台,然后是'['字符。然后你发送你想要的颜色值,然后是'm'。
类似的东西:
Console.WriteLine("\x1b[31mRed\x1b[0;37m");
除非明确启用,否则Windows控制台支持非常有限。我相信Windows 10支持ANSI转义代码。
答案 1 :(得分:2)
据我所知,Windows控制台应用程序(如cmd.exe)中没有此类控制代码。有一些创造性的方法可以达到类似的效果。其中之一是How to echo with different colors in the Windows command line。我出于好奇而尝试了它,效果很好。它使用了一些jscript魔法。对于日常使用,如果您想要转义码格式化功能,您可能会发现其中一个bash shell模拟器更有用。 (How to develop in Linux-Like Shell (bash) on Windows?)
<强>更新强>
我把一些非常快速和肮脏的东西拼凑在一起,以展示一种方法,使用类似于你在问题中使用的样式的“代码”。这可能不是“最好”的方式。但它可能会引发一个想法。
class Program
{
static void Main(string[] args)
{
@"
This is in ~r~red~~ and this is in ~b~blue~~. This is just some more text
to work it out a bit. ~g~And now a bit of green~~.
".WriteToConsole();
Console.ReadKey();
}
}
static public class StringConsoleExtensions
{
private static readonly Dictionary<string, ConsoleColor> ColorMap = new Dictionary<string, ConsoleColor>
{
{ "r", ConsoleColor.Red },
{ "b", ConsoleColor.Blue },
{ "g", ConsoleColor.Green },
{ "w", ConsoleColor.White },
};
static public void WriteToConsole(this string value)
{
var position = 0;
foreach (Match match in Regex.Matches(value, @"~(r|g|b|w)~([^~]*)~~"))
{
var leadingText = value.Substring(position, match.Index - position);
position += leadingText.Length + match.Length;
Console.Write(leadingText);
var currentColor = Console.ForegroundColor;
try
{
Console.ForegroundColor = ColorMap[match.Groups[1].Value];
Console.Write(match.Groups[2].Value);
}
finally
{
Console.ForegroundColor = currentColor;
}
}
if (position < value.Length)
{
Console.Write(value.Substring(position, value.Length - position));
}
}
}
我认为可能有办法让正则表达式捕获主要文本。但我没有太多时间去试验。我有兴趣看看是否有一种模式可以让正则表达式完成所有的工作。