Windowsコマンドプロンプト用のプログラムを書いています。私はもともと Windows 7 で作業していましたが、Windows 10 にアップグレードしたところ壊れてしまいました。
バッチ ファイルは次のように始まります。
rem _bc == Background Color (NOT ANSI)
rem _bc2 == ANSI BGCOLOR
rem _hc == Highlight Color
rem _hc2 == NOT Highlighted Color
set _hc=[1;36;
set _hc2=[1;37;
set _bc=[0m
set _bc2=46m
set color2=f
ansicon cmd /K
私のプログラムでは、出力行を取得し、行の先頭と末尾に (厳密ではありませんが例として) テキストに色を付けるための ANSI コードを持つ変数を追加したいと考えています。これには常に sed を使用してきました。sed を使用すると、変数を各出力にハードコーディングするよりも柔軟でした...
echo Keep your eye out for %_hc%%_bc2%Highlighted%_bc%%_hc2%%_bc2% information!
これは、次のようなものと比較しています。
echo THIS IS THE TEST OUTPUT:|sed "s/^/%_hc%%_bc2%/"|sed "s/$/%_bc%/"
rem ================[Result]=======================
rem Displays "THIS IS THE TEST OUTPUT" in color
rem This is broken in Windows 10's Command Prompt.
sed、sort、または基本的に echo または type コマンド以外のすべてを使用すると、色の出力が取り除かれ、代わりに ANSI コードが出力されるようです。これは、Windows 7 または XP では発生しませんでした。例えば:
echo %_hc%%_bc2%THIS IS THE TEST OUTPUT:%_bc%|sort
rem ================[Result]=======================
rem Displays "←[1;36;46mTHIS IS THE TEST OUTPUT←[0m"
rem This works if you don't pipe it to sort.
rem Outputting to a file and then using type also works.
問題は、エコーがパイプをサポートしていないため、変更後にエコーにパイプできないことです (ほとんどすべての目的で冗長になるため)。Typeで使用するためにファイルにリダイレクトしたくありませんが、パイプ可能なタイプのコマンドの代替手段がうまくいくと思いますが、周りを検索して見つけることができませんでした。
sedなどを使用できるように柔軟性を維持する必要があります...キーワード、フィールド番号などを介してテキスト行のどこにでもハイライトを挿入できます。たとえば、これを実現できます。
Keep your eye out for Highlighted information!
rem ================[Result]=======================
rem Displays "Keep your eye out for Highlighted information!"
rem Where "Highlighted" is the only word in color.
ファイルにパイプしたり、ANSI 変数を設定位置にハードコーディングしたりせずに、これに取り組む助けがあれば大歓迎です。