« コンソールコマンドを実行して、そのコンソールログを採取するコマンドをVB.NETで作る(その2) | トップページ | .NETオブジェクトのオーバロードされたメソッドのサフィックスを調べる。 »

2008年9月10日 (水)

コンソールで一部の文字列の文字色と背景色を変えるEchoコマンド拡張

EchoX.exe 文字色 背景色 文字列 [文字色 背景色 文字列]...

文字色と背景色は、数字または名前で指定します。

0 Black
1 DarkBlue
2 DarkGreen
3 DarkCyan
4 DarkRed
5 DarkMagenta
6 DarkYellow
7 Gray
8 DarkGray
9 Blue
10 Green
11 Cyan
12 Red
13 Magenta
14 Yellow
15 White

vbc EchoX.VB

Public Class Class1
Public Shared Sub Main(ByVal Args() As String)
If Args.Length = 0 OrElse Args.Length Mod 3 Then
  Console.WriteLine("Usage: EchoX ForegroundColor BackgroundColor String [F B S]...")
  For Each ColorName As String In ConsoleColor.GetNames(GetType(ConsoleColor))
    Console.WriteLine("{0,2} {1}", [Enum].Format(GetType(ConsoleColor), CType([Enum].Parse(GetType(ConsoleColor), ColorName), ConsoleColor), "d"), ColorName)
  Next
  Exit Sub
End If
Try
  For k As Integer =0 To UBound(Args) Step 3
    Console.ForegroundColor = CType([Enum].Parse(GetType(ConsoleColor), Args(k), True), ConsoleColor)
    Console.BackgroundColor = CType([Enum].Parse(GetType(ConsoleColor), Args(k+1), True), ConsoleColor)
    Console.Write(Args(k+2))
  Next
  Console.ResetColor()
Catch
  Console.ResetColor()
  Console.Error.WriteLine("Source" & vbTab & vbTab & Err.Source & vbLf & "Number" & vbTab & vbTab & Err.Number & vbLf & "Description" & vbTab & Err.Description & vbLf & "DLL Error" & vbTab & vbTab & Err.LastDLLError)
End Try
End Sub
End Class

文字列に空白を含むときは、""で囲みます
その中に更に"を含むときは、\"でエスケープします。
このとき、偶数番目の"から奇数番目の"までの間は、CMD.EXEの制御文字^&|<>)を^でエスケープする必要があります。

行末の改行はありません。

« コンソールコマンドを実行して、そのコンソールログを採取するコマンドをVB.NETで作る(その2) | トップページ | .NETオブジェクトのオーバロードされたメソッドのサフィックスを調べる。 »