Windowsのコマンドプロンプトで、ある特定の文字列の色を変更するための方法を知りたくて、気軽な気持ちで調べてみたのですが……驚くほどに自分の求める情報がありませんでした。
自分のような詳しくない人でも簡単にできる文字の色表示をするための方法が、色々な単語で検索をしてみても出てこないなんて、おかしいよ、困るよと思ったので、意地になって調べてみました。
なので、今回経験したこと、知った情報、方法をまとめておきます。素人なので詳しいことはわかりませんが、最終的に、一応は自分の求める特定の文字の色付けはできるようになった…はず。
目次
コマンドプロンプトの標準出力で一部分だけ、特定の単語だけ色付けハイライト表示させたい!
Windowsのコマンドプロンプトを使っていて、findstr、echo、dir、tasklist、sc queryexなどを使用する時に特定のワード(例えばerrorとか)だけをハイライト表示で色付けて目立たせたい時ってありませんか?
だからと言って、その単語のある行だけが表示されるというのは全体が見えなくて困るから、全ての行を表示させたい。
全体が見渡せつつも、特定のキーワードがあるかどうかをすぐに見つけられるようにしたいなと。
コマンドプロンプトのcolorコマンドで背景と文字の表示色を設定をする方法
Windowsのコマンドプロンプトで文字列の色を変更するには、colorコマンドを使えばできるはずなのに、コマンドを打ち込んでもできなくてまず頭をかしげました。
調べてみると、Windowsのコマンドプロンプトはそのままでは、色の設定のために必要となるANSIエスケープシーケンスというのに対応していないらしい。
対応させるには、ansi.sysというのをC:¥Windows¥system32¥config.ntに追加すればいいと色んな記事に書いてあるので、ansi.sysをダウンロードしてみたけれど、C:¥Windows¥system32¥config.ntというのがパソコンの中に見つからない。どうやら、Windows7あたりからなくなったらしい。
さらに調べていくと、Windows7以降では、ansiconというのを設定すればいいということが判明しました。
ダウンロード、設定の仕方はWindows環境でRSpecなどの出力に色を付けるには – 萬由無事覚書を参考に簡単にできました。
そうすると、確かにcolorコマンドを使って、コマンドプロンプトの文字出力に色が付けられるようになりました。
やった! と感動したのですが、私が知りたいのは、特定の文字列だけの色を変更して表示させるための方法で……colorコマンドでは無理だと、このときに気づきました。
コマンドプロンプトで特定文字列の出力の色を変える方法
コマンドプロプトで文字列検索や出力というと、findstrコマンドになりますが、このコマンドですと検索で一致した文字列の色のみを変更させる方法が分かりませんでした。
検索一致した文字列が存在する行番号などの色を変えることはできたのですが、不思議で不便なことに、一致した文字列の色を変える方法が見当たりませんでした。
さらに調べているとどうやら私のやりたいことはLinuxでは簡単にできるということがわかって、しかも、どうやらWindowsのコマンドプロンプトでLinuxのコマンドを使えるようにもすることができると知ったので、今回はその方法を使って、特定の文字色を変更することを実現することができました。
WindowsのコマンドプロンプトでLinuxのコマンドを使えるようにするには、CygwinとInterixが有名らしいのですが、どちらもインストールや設定が大がかりで大変みたいだったので、使いませんでした。
私のやりたいことは、ただ一部特定の文字列の色を変えることができればそれでいいので、欲しいコマンドはとりあえずgrepだけだったので、あまり面倒なことはしたくない、PCに重いのは入れずに手軽でいいなと。
そうなると、軽くできるものとして、GnuWin32、yagrepというものが見つかりました。
・Win32 ネイティブアプリケーションでビルドされている
・パスを通せばコマンドプロンプト で使える
ということらしので、手軽でよさげということで試してみました。
GnuWin32のほうはエスケープシーケンスの読み込ませ方がわからず、そのまま記号が表示されてしまいましたが、yagrepのほうはまさに自分が色を付けたい特定の文字列だけ色を変更して出力してくれてます。
一応、私のような初心者の方向けにコマンドの説明。
PATH=C:\Program Files (x86)\GnuWin32\bin;%PATH%
PATH=C:\Program Files (x86)\yagrep-20090331;%PATH%
(ダウンロードしたファイルの場所を知らせてる)
set TERM=tty(ターミナル(表示ソフト)の指定……らしい)
dir | (ya)grep –color=auto -e “error” -e “$”
(dirコマンドで出力される文字列を、「|」で(ya)grerpコマンドに渡している。–color=autoは検索で一致した文字列の色を変えるように命令してる。-e “~~”で検索したい文字列を指定してる。$は行末という意味を表す特殊な記号。行末に色はないので、結果としてerrorのみの色が変更されている)
自分が色々と詳しくなるまでは、手軽ですし、ひとまずはyagrepで文字の色付けをしておこうと思います。
これだけのことをできるようになるために、随分とたくさんの検索をして時間をかけて遠回りしてしまいました。
検索をしても方法がすっきりと出てこなかったのは、コマンドプロンプトで私のようなことをしたいと思う人で、いちいち調べないとできないという人がいないからなのでしょうか?
うーん、どうなんだろう。
・追記
もちろん、echoでも一部の文字列の色をこの方法で変えることはできます。
echo 今の状態はerrorです | yagrep –color=auto -e “error” -e “$”
こんな感じで書けば、errorの部分だけ赤字になります。