color bf
コマンドはコマンドラインウィンドウ全体の色を設定することを知っていますが、1つの行を別の色で印刷したかったのです。
単一の行を別の色で印刷したかった。
ANSIエスケープシーケンスを使用します。
10より前のWindows-コンソールでのANSIカラーのネイティブサポートなし
Windowsバージョン10未満の場合、Windowsコマンドコンソールはデフォルトで出力の色付けをサポートしません。 Cmder 、 ConEm 、 ANSICON または Mintty (GitBashおよびCygwinでデフォルトで使用)のいずれかをインストールできます。 Windowsコマンドコンソールにカラーリングサポートを追加します。
Windows 10-コマンドラインの色
Windows 10以降、Windowsコンソールは、デフォルトでANSIエスケープシーケンスと一部の色をサポートしています。この機能は、2015年11月のThreshold 2 Updateと共に出荷されました。
Update(05-2019): ColorTool を使用すると、コンソールの配色を変更できます。これは、Microsoft Terminal プロジェクトの一部です。
デモ
バッチコマンド
win10colors.cmd
は Michele Locati によって書かれました:
@echo off
cls
echo [101;93m STYLES [0m
echo ^<ESC^>[0m [0mReset[0m
echo ^<ESC^>[1m [1mBold[0m
echo ^<ESC^>[4m [4mUnderline[0m
echo ^<ESC^>[7m [7mInverse[0m
echo.
echo [101;93m NORMAL FOREGROUND COLORS [0m
echo ^<ESC^>[30m [30mBlack[0m (black)
echo ^<ESC^>[31m [31mRed[0m
echo ^<ESC^>[32m [32mGreen[0m
echo ^<ESC^>[33m [33mYellow[0m
echo ^<ESC^>[34m [34mBlue[0m
echo ^<ESC^>[35m [35mMagenta[0m
echo ^<ESC^>[36m [36mCyan[0m
echo ^<ESC^>[37m [37mWhite[0m
echo.
echo [101;93m NORMAL BACKGROUND COLORS [0m
echo ^<ESC^>[40m [40mBlack[0m
echo ^<ESC^>[41m [41mRed[0m
echo ^<ESC^>[42m [42mGreen[0m
echo ^<ESC^>[43m [43mYellow[0m
echo ^<ESC^>[44m [44mBlue[0m
echo ^<ESC^>[45m [45mMagenta[0m
echo ^<ESC^>[46m [46mCyan[0m
echo ^<ESC^>[47m [47mWhite[0m (white)
echo.
echo [101;93m STRONG FOREGROUND COLORS [0m
echo ^<ESC^>[90m [90mWhite[0m
echo ^<ESC^>[91m [91mRed[0m
echo ^<ESC^>[92m [92mGreen[0m
echo ^<ESC^>[93m [93mYellow[0m
echo ^<ESC^>[94m [94mBlue[0m
echo ^<ESC^>[95m [95mMagenta[0m
echo ^<ESC^>[96m [96mCyan[0m
echo ^<ESC^>[97m [97mWhite[0m
echo.
echo [101;93m STRONG BACKGROUND COLORS [0m
echo ^<ESC^>[100m [100mBlack[0m
echo ^<ESC^>[101m [101mRed[0m
echo ^<ESC^>[102m [102mGreen[0m
echo ^<ESC^>[103m [103mYellow[0m
echo ^<ESC^>[104m [104mBlue[0m
echo ^<ESC^>[105m [105mMagenta[0m
echo ^<ESC^>[106m [106mCyan[0m
echo ^<ESC^>[107m [107mWhite[0m
echo.
echo [101;93m COMBINATIONS [0m
echo ^<ESC^>[31m [31mred foreground color[0m
echo ^<ESC^>[7m [7minverse foreground ^<-^> background[0m
echo ^<ESC^>[7;31m [7;31minverse red foreground color[0m
echo ^<ESC^>[7m and nested ^<ESC^>[31m [7mbefore [31mnested[0m
echo ^<ESC^>[31m and nested ^<ESC^>[7m [31mbefore [7mnested[0m
これは自己コンパイルbat/.netハイブリッド(.BAT
として保存する必要があります)で、.netフレームワークをインストールしたシステムで使用できます(最も古いXP/2003インストールでも、.NETフレームワークのないウィンドウが表示されることはまれです。 jscript.netコンパイラを使用して、現在の行に対してのみ異なる背景/前景色で文字列を印刷できるexeを作成します。
@if (@X)==(@Y) @end /* JScript comment
@echo off
setlocal
for /f "tokens=* delims=" %%v in ('dir /b /s /a:-d /o:-n "%SystemRoot%\Microsoft.NET\Framework\*jsc.exe"') do (
set "jsc=%%v"
)
if not exist "%~n0.exe" (
"%jsc%" /nologo /out:"%~n0.exe" "%~dpsfnx0"
)
%~n0.exe %*
endlocal & exit /b %errorlevel%
*/
import System;
var arguments:String[] = Environment.GetCommandLineArgs();
var newLine = false;
var output = "";
var foregroundColor = Console.ForegroundColor;
var backgroundColor = Console.BackgroundColor;
var evaluate = false;
var currentBackground=Console.BackgroundColor;
var currentForeground=Console.ForegroundColor;
//http://stackoverflow.com/a/24294348/388389
var jsEscapes = {
'n': '\n',
'r': '\r',
't': '\t',
'f': '\f',
'v': '\v',
'b': '\b'
};
function decodeJsEscape(_, hex0, hex1, octal, other) {
var hex = hex0 || hex1;
if (hex) { return String.fromCharCode(parseInt(hex, 16)); }
if (octal) { return String.fromCharCode(parseInt(octal, 8)); }
return jsEscapes[other] || other;
}
function decodeJsString(s) {
return s.replace(
// Matches an escape sequence with UTF-16 in group 1, single byte hex in group 2,
// octal in group 3, and arbitrary other single-character escapes in group 4.
/\\(?:u([0-9A-Fa-f]{4})|x([0-9A-Fa-f]{2})|([0-3][0-7]{0,2}|[4-7][0-7]?)|(.))/g,
decodeJsEscape);
}
function printHelp( ) {
print( arguments[0] + " -s string [-f foreground] [-b background] [-n] [-e]" );
print( " " );
print( " string String to be printed" );
print( " foreground Foreground color - a " );
print( " number between 0 and 15." );
print( " background Background color - a " );
print( " number between 0 and 15." );
print( " -n Indicates if a new line should" );
print( " be written at the end of the ");
print( " string(by default - no)." );
print( " -e Evaluates special character " );
print( " sequences like \\n\\b\\r and etc ");
print( "" );
print( "Colors :" );
for ( var c = 0 ; c < 16 ; c++ ) {
Console.BackgroundColor = c;
Console.Write( " " );
Console.BackgroundColor=currentBackground;
Console.Write( "-"+c );
Console.WriteLine( "" );
}
Console.BackgroundColor=currentBackground;
}
function errorChecker( e:Error ) {
if ( e.message == "Input string was not in a correct format." ) {
print( "the color parameters should be numbers between 0 and 15" );
Environment.Exit( 1 );
} else if (e.message == "Index was outside the bounds of the array.") {
print( "invalid arguments" );
Environment.Exit( 2 );
} else {
print ( "Error Message: " + e.message );
print ( "Error Code: " + ( e.number & 0xFFFF ) );
print ( "Error Name: " + e.name );
Environment.Exit( 666 );
}
}
function numberChecker( i:Int32 ){
if( i > 15 || i < 0 ) {
print("the color parameters should be numbers between 0 and 15");
Environment.Exit(1);
}
}
if ( arguments.length == 1 || arguments[1].toLowerCase() == "-help" || arguments[1].toLowerCase() == "-help" ) {
printHelp();
Environment.Exit(0);
}
for (var arg = 1; arg <= arguments.length-1; arg++ ) {
if ( arguments[arg].toLowerCase() == "-n" ) {
newLine=true;
}
if ( arguments[arg].toLowerCase() == "-e" ) {
evaluate=true;
}
if ( arguments[arg].toLowerCase() == "-s" ) {
output=arguments[arg+1];
}
if ( arguments[arg].toLowerCase() == "-b" ) {
try {
backgroundColor=Int32.Parse( arguments[arg+1] );
} catch(e) {
errorChecker(e);
}
}
if ( arguments[arg].toLowerCase() == "-f" ) {
try {
foregroundColor=Int32.Parse(arguments[arg+1]);
} catch(e) {
errorChecker(e);
}
}
}
Console.BackgroundColor = backgroundColor ;
Console.ForegroundColor = foregroundColor ;
if ( evaluate ) {
output=decodeJsString(output);
}
if ( newLine ) {
Console.WriteLine(output);
} else {
Console.Write(output);
}
Console.BackgroundColor = currentBackground;
Console.ForegroundColor = currentForeground;
ヘルプメッセージは次のとおりです。
例:
coloroutput.bat -s "aa\nbb\n\u0025cc" -b 10 -f 3 -n -e
このスクリプトを見つけることもできます here 。
Carlosの色関数も確認できます-> http://www.dostips.com/forum/viewtopic.php?f=3&t=445
これはすばらしい答えではありませんが、ターゲットワークステーションにPowershellがあることがわかっている場合は、次のようなことができます(BAT/CMDスクリプトを想定):
CALL:ECHORED "Print me in red!"
:ECHORED
%Windir%\System32\WindowsPowerShell\v1.0\Powershell.exe write-Host -foregroundcolor Red %1
goto:eof
それは古い答えですが、私は少し明確にして簡略化すると思いました
PowerShell は現在 includedすべてのバージョンで 7以降のWindowsです。したがって、この回答の構文はより単純なものに短縮できます。形:
-fore
の代わりに-foregroundcolor
を使用します-back
の代わりに-backgroundcolor
を使用しますecho
の代わりに 'inline'を使用することもできますpowershell write-Host -fore Cyan This is Cyan text
powershell write-Host -back Red This is Red background
色と詳細情報の完全なリストは、
-PowerShell Write-Host
のドキュメント
印刷するWordの名前でファイルを作成し、カラーで印刷できるfindstrを使用して、ファイルを消去できます。この例を試してください:
@echo off
SETLOCAL EnableDelayedExpansion
for /F "tokens=1,2 delims=#" %%a in ('"Prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
set "DEL=%%a"
)
call :ColorText 0a "green"
call :ColorText 0C "red"
call :ColorText 0b "cyan"
echo(
call :ColorText 19 "blue"
call :ColorText 2F "white"
call :ColorText 4e "yellow"
goto :eof
:ColorText
echo off
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1
goto :eof
color /?
を実行して、色のリストを取得します。
ANSICON を使用して、最新のWindowsでANSI端末コードを有効にできます。 Windows XPおよびWindows 7で使用した32ビットバージョンと64ビットバージョンがあります。
Windows 10-TH2以降:
コマンドプロンプトで:
echo ^[[32m HI ^[[0m
実際のキーの使用:echo Ctrl+
[[32m HI
Ctrl+[[0m
Enter
その下に緑色の「HI」が表示されます。
コード番号は次の場所にあります。
メモ帳:
これをメモ帳に保存するには、次を使用してESCと入力します。 Altテンキーで+027
、次に[32m
の部分。私がラップトップにいたときの別のトリックは、上の行をファイルにリダイレクトして開始し、カットアンドペーストします:
echo echo ^[[32m HI ^[[0m >> batch_file.cmd
私もcmdに適切な色付けがないことに悩まされていたので、先に進んでcmdcolorを作成しました。 ANSI/VT100制御シーケンスの限られたセット(つまり、bashのような)、つまりecho \033[31m RED \033[0m DEFAULT | cmdcolor.exe
を探すstdoutプロキシにすぎません。
Win7 Batchファイルにいくつかの単純なテキストカラーを導入したかったので、これを見てみました。これが私が思いついたものです。ご協力いただきありがとうございます。
@echo off
cls && color 08
rem .... the following line creates a [DEL] [ASCII 8] [Backspace] character to use later
rem .... All this to remove [:]
for /F "tokens=1,2 delims=#" %%a in ('"Prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (set "DEL=%%a")
echo.
<nul set /p="("
call :PainText 09 "BLUE is cold" && <nul set /p=") ("
call :PainText 02 "GREEN is earth" && <nul set /p=") ("
call :PainText F0 "BLACK is night" && <nul set /p=")"
echo.
<nul set /p="("
call :PainText 04 "RED is blood" && <nul set /p=") ("
call :PainText 0e "YELLOW is pee" && <nul set /p=") ("
call :PainText 0F "WHITE all colors"&& <nul set /p=")"
goto :end
:PainText
<nul set /p "=%DEL%" > "%~2"
findstr /v /a:%1 /R "+" "%~2" nul
del "%~2" > nul
goto :eof
:end
echo.
pause
cechoを使用することもできます。comまたは.exeを持ち歩く必要がないように、スクリプトに直接埋め込むこともできます。
http://www.codeproject.com/Articles/17033/Add-Colors-to-Batch-Files
テキストの色を変更するには、ANSIエスケープコードシーケンスをエコーする必要があります。 http://en.wikipedia.org/wiki/ANSI_escape_code
これらのエスケープコードのもう1つの非常に優れたソースは、 http://ascii-table.com/ansi-escape-sequences.php です。
デスクトップのColourText.bas
というファイルに次の行を追加します。
Imports System
Imports System.IO
Imports System.Runtime.InteropServices
Imports Microsoft.Win32
Public Module MyApplication
Public Declare Function GetStdHandle Lib "kernel32" Alias "GetStdHandle" (ByVal nStdHandle As Long) As Long
Public Declare Function SetConsoleTextAttribute Lib "kernel32" Alias "SetConsoleTextAttribute" (ByVal hConsoleOutput As Long, ByVal wAttributes As Long) As Long
Public Const STD_ERROR_HANDLE = -12&
Public Const STD_INPUT_HANDLE = -10&
Public Const STD_OUTPUT_HANDLE = -11&
Sub Main()
Dim hOut as Long
Dim Ret as Long
Dim Colour As Long
Dim Colour1 As Long
Dim Text As String
hOut = GetStdHandle(STD_OUTPUT_HANDLE)
Colour = CLng("&h" & Split(Command(), " ")(0))
Colour1 = Clng("&h" & Split(Command(), " ")(1))
Text = Mid(Command(), 7)
Ret = SetConsoleTextAttribute(hOut, Colour)
Console.Out.WriteLine(text)
Ret = SetConsoleTextAttribute(hOut, Colour1)
End Sub
End Module
保存して、コマンドプロンプトに次のように入力します。
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc.exe" /target:exe /out:"%userprofile%\desktop\ColourText.exe" "%userprofile%\desktop\ColourText.bas" /verbose
ColourText.exeというファイルがデスクトップに表示されます。 Windowsフォルダーに移動。
使用するには、2つの文字コードを使用して色を設定する必要があります(例:01
ではなく、1
)。
ColourText ColourOfText ColourOfTextWhenFinished Text
EGテキストを渡さずに白に青を設定し、白のテキストに赤を設定し、グレーに青を設定します。
ColourText F1 F1
ColourText F2 71 This is green on white
または
ColourText F1 F1
cls
ColourText F4 F4
Echo Hello
Echo Hello today
ColourText F1 F1
CLS
コマンドも興味深いものになります。パラメータなしのColor
コマンドは、すべての色を起動時の色にリセットします。
色コードを取得するには、次の数字を一緒に追加します。プログラマモードで電卓を使用します。これらは16進数です。これらは一緒に追加できます。たとえば、赤+青+ FG強度= 13 =D。10+を使用しなかったため、背景は黒になります。カラーコードは2文字にする必要があります。たとえば、08
ではなく8
です。
FOREGROUND_RED = &H4 ' text color contains red.
FOREGROUND_INTENSITY = &H8 ' text color is intensified.
FOREGROUND_GREEN = &H2 ' text color contains green.
FOREGROUND_BLUE = &H1 ' text color contains blue.
BACKGROUND_BLUE = &H10 ' background color contains blue.
BACKGROUND_GREEN = &H20 ' background color contains green.
BACKGROUND_INTENSITY = &H80 ' background color is intensified.
BACKGROUND_RED = &H40 ' background color contains red.
これをWindows 10で機能させるには、このフラグを有効にします:ENABLE_VIRTUAL_TERMINAL_PROCESSING
。
このレジストリキーを使用すると、デフォルトでこれを設定できます
[HKCU\Console] VirtualTerminalLevel dword 0x1
Glenn Slayden が この回答 で述べたように、レジストリに適切な値を追加して、cmdを「よりカラフル」にすることができます。
幸いなことに、グローバルなデフォルトはオプトインからオプトアウトに変更できます。 HKEY_CURRENT_USER\Console\VirtualTerminalLevelのレジストリキーは、ANSIエスケープシーケンスを処理するためのグローバルなデフォルト動作を設定します。 DWORDキーを(必要に応じて)作成し、その値を1に設定して、デフォルトでANSI処理をグローバルに有効にします(または0で無効にします)。