color bf
コマンドがコマンドラインウィンドウ全体の色を設定することは知っていますが、1つの行を別の色で印刷したいと思いました。
color bf
コマンドがコマンドラインウィンドウ全体の色を設定することは知っていますが、1つの行を別の色で印刷したいと思いました。
回答:
1行を別の色で印刷したいと思っていました。
ANSIエスケープシーケンスを使用します。
Windows 10より前-コンソールでのANSIカラーのネイティブサポートなし
10未満のWindowsバージョンの場合、Windowsコマンドコンソールはデフォルトで出力の色分けをサポートしていません。Cmder、ConEmu、ANSICON、またはMintty(GitBashおよびCygwinでデフォルトで使用される)のいずれかをインストールして、Windowsコマンドコンソールにカラーサポートを追加できます。
Windows 10-コマンドラインの色
Windows 10以降、WindowsコンソールはデフォルトでANSIエスケープシーケンスと一部の色をサポートしています。この機能は、2015年11月にThreshold 2 Updateとともに出荷されました。
アップデート(05-2019):ColorToolを使用すると、コンソールの配色を変更できます。これは、Microsoft ターミナルプロジェクトの一部です。
デモ
バッチコマンド
win10colors.cmd
書かれたミケーレ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
.cmd
または.bat
-両方とも動作するはずです。しかし、私はそれが機能しない理由を知っていると思います:StackOverflowに投稿するときにエスケープシンボルが削除されているようです。代わりに、ここからコンテンツを使用し、私の答えからコンテンツをコピーしないでください。gist.githubusercontent.com/mlocati/...を
ESC
以前にメモ帳++でインを生成する必要はありませんでした...テンキーと左のALTキーを使用してALTコードでこれを行うことができます:L-ALT
+ 0
+ 2
+7
ESC
バッチファイル内の文字をこのように:for /F %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a"
これは.netフレームワークがインストールされているシステムで使用できる自己コンパイルされたbat / .netハイブリッド(として保存する必要があります.BAT
)(最も古い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
このスクリプトはここにもあります。
カルロスのカラー関数を確認することもできます-> http://www.dostips.com/forum/viewtopic.php?f=3&t=4453
これは良い答えではありませんが、ターゲットワークステーションに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は7以降、すべてのバージョンのWindowsに含まれています。したがって、この回答の構文はより単純な形式に短縮できます。
-fore
代わりに使用-foregroundcolor
-back
代わりに使用-backgroundcolor
echo
powershell write-host -fore Cyan This is Cyan text
powershell write-host -back Red This is Red background
色とより多くの情報の完全なリストはで利用可能です
- PowerShellのためのドキュメントWrite-Host
Windows 10-TH2以降:
(別名バージョン1511、ビルド10586、リリース2015-11-10)
コマンドプロンプト:
echo ^[[32m HI ^[[0m
実際のキーを使用:echo Ctrl+ [[32m HI
Ctrl+[[0m
Enter
その下に緑色の「HI」が表示されます。
コード番号はここにあります:
メモ帳:
これをメモ帳に保存するには、次のコマンドを使用してESCを入力します。Alt+ 027
テンキーで、次に[32m
パーツ。私がラップトップを使用していたときのもう1つのトリックは、上記の行をファイルにリダイレクトして開始してから、カットアンドペーストします。
echo echo ^[[32m HI ^[[0m >> batch_file.cmd
\033
ません。
印刷する単語の名前でファイルを作成し、カラーで印刷できる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ビットバージョンがあります。
私もcmdに適切なカラーリングがないことに悩まされていたので、先に進んでcmdcolorを作成しました。これは単なるstdoutプロキシであり、ANSI / VT100制御シーケンスの限られたセット(つまり、bashのような)を探しecho \033[31m RED \033[0m DEFAULT | cmdcolor.exe
ます。
cmdcolor.exe; PE32 executable for MS Windows (console) Intel 80386 32-bit
upx
。メールで連絡してもらえますか?
これは、Win7バッチファイルにいくつかの単純なテキストの色を導入したかったためです。これが私が思いついたものです。ご協力いただきありがとうございます。
@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
すでに250を超える賛成投票で承認された回答があります。私がまだ貢献している理由は、escape
エコーに必要な文字が多くのエディターで受け入れられていないため(たとえば、MS Codeを使用しています)、他のすべてのソリューションにはサードパーティ(Windows以外のデフォルト)のソフトウェアが必要なためです。
プレーンバッチコマンドのみを使用する回避策は、のPROMPT
代わりにを使用することですECHO
。PROMPT
コマンドは受け入れescape
として任意のエディタに優しい方法で、文字$E
の文字列を。(単に置き換えるEsc
でASCIIエスケープコードを持ちます)$E
。
ここにデモコードがあります:
@ECHO OFF
:: Do not pollute environment with the %prompt.bak% variable
:: ! forgetting ENDLOCAL at the end of the batch leads to prompt corruption
SETLOCAL
:: Old prompt settings backup
SET prompt.bak=%PROMPT%
:: Entering the "ECHO"-like section
:: Forcing prompt to display after every command (see below)
ECHO ON
:: Setting the prompt using the ANSI Escape sequence(s)
:: - Always start with $E[1A, otherwise the text would appear on a next line
:: - Then the decorated text follows
:: - And it all ends with $E30;40m, which makes the following command invisible
:: - assuming default background color of the screen
@ PROMPT $E[1A$E[30;42mHELLO$E[30;40m
:: An "empty" command that forces the prompt to display.
:: The word "rem" is displayed along with the prompt text but is made invisible
rem
:: Just another text to display
@ PROMPT $E[1A$E[33;41mWORLD$E[30;40m
rem
:: Leaving the "ECHO"-like section
@ECHO OFF
:: Or a more readable version utilizing the cursor manipulation ASCII ESC sequences
:: the initial sequence
PROMPT $E[1A
:: formating commands
PROMPT %PROMPT%$E[32;44m
:: the text
PROMPT %PROMPT%This is an "ECHO"ed text...
:: new line; 2000 is to move to the left "a lot"
PROMPT %PROMPT%$E[1B$E[2000D
:: formating commands fro the next line
PROMPT %PROMPT%$E[33;47m
:: the text (new line)
PROMPT %PROMPT%...spreading over two lines
:: the closing sequence
PROMPT %PROMPT%$E[30;40m
:: Looks like this without the intermediate comments:
:: PROMPT $E[1A
:: PROMPT %PROMPT%$E[32;44m
:: PROMPT %PROMPT%This is an "ECHO"ed text...
:: PROMPT %PROMPT%$E[1B$E[2000D
:: PROMPT %PROMPT%$E[33;47m
:: PROMPT %PROMPT%...spreading over two lines
:: PROMPT %PROMPT%$E[30;40m
:: show it all at once!
ECHO ON
rem
@ECHO OFF
:: End of "ECHO"-ing
:: Setting prompt back to its original value
:: - We prepend the settings with $E[37;40m in case
:: the original prompt settings do not specify color
:: (as they don't by default).
:: - If they do, the $E[37;40m will become overridden, anyway.
:: ! It is important to write this command
:: as it is with `ENDLOCAL` and in the `&` form.
ENDLOCAL & PROMPT $E[37;40m%prompt.bak%
EXIT /B 0
注:唯一の欠点は、color
明示的に知られていない場合、この手法がユーザーのcmdカラー設定(コマンドまたは設定)と競合することです。
-冒頭で述べた理由のために私にとって受け入れ可能な唯一のソリューションであるため、これが役立つことを願っています。-
編集:
コメントに基づいて、@ Jebに触発された別のスニペットを同封します。それ:
ECHO
コマンドを使用しますPROMPT
値には影響しませんECHO
出力の色付けは必然的にPROMPT
色に影響するため、とにかく色をリセットする必要があることを示します@ECHO OFF
:: ! To observe color effects on prompt below in this script
:: run the script from a fresh cmd window with no custom
:: prompt settings
:: Only not to pollute the environment with the %\e% variable (see below)
:: Not needed because of the `PROMPT` variable
SETLOCAL
:: Parsing the `escape` character (ASCII 27) to a %\e% variable
:: Use %\e% in place of `Esc` in the [http://ascii-table.com/ansi-escape-sequences.php]
FOR /F "delims=#" %%E IN ('"prompt #$E# & FOR %%E IN (1) DO rem"') DO SET "\e=%%E"
:: Demonstrate that prompt did not get corrupted by the previous FOR
ECHO ON
rem : After for
@ECHO OFF
:: Some fancy ASCII ESC staff
ECHO [ ]
FOR /L %%G IN (1,1,10) DO (
TIMEOUT /T 1 > NUL
ECHO %\e%[1A%\e%[%%GC%\e%[31;43m.
ECHO %\e%[1A%\e%[11C%\e%[37;40m]
)
:: ECHO another decorated text
:: - notice the `%\e%[30C` cursor positioning sequence
:: for the sake of the "After ECHO" test below
ECHO %\e%[1A%\e%[13C%\e%[32;47mHELLO WORLD%\e%[30C
:: Demonstrate that prompt did not get corrupted by ECHOing
:: neither does the cursor positioning take effect.
:: ! But the color settings do.
ECHO ON
rem : After ECHO
@ECHO OFF
ENDLOCAL
:: Demonstrate that color settings do not reset
:: even when out of the SETLOCAL scope
ECHO ON
rem : After ENDLOCAL
@ECHO OFF
:: Reset the `PROMPT` color
:: - `PROMPT` itself is untouched so we did not need to backup it.
:: - Still ECHOING in color apparently collide with user color cmd settings (if any).
:: ! Resetting `PROMPT` color this way extends the `PROMPT`
:: by the initial `$E[37;40m` sequence every time the script runs.
:: - Better solution then would be to end every (or last) `ECHO` command
:: with the `%\e%[37;40m` sequence and avoid setting `PROMPT` altogether.
:: which makes this technique preferable to the previous one (before EDIT)
:: - I am keeping it this way only to be able to
:: demonstrate the `ECHO` color effects on the `PROMPT` above.
PROMPT $E[37;40m%PROMPT%
ECHO ON
rem : After PROMPT color reset
@ECHO OFF
EXIT /B 0
for /F "delims=#" %%E in ('"prompt #$E# & for %%E in (1) do rem"') do set "\e=%%E"
set ASCII27=←
とfor /F "delims=#" %%E in ('"prompt #$E# & for %%E in (1) do rem"') do set "ASCII27=%%E"
。これは、プロンプトを永続的に変更せずに(prompt
コマンドが子プロセスで実行されるため)、promptコマンドによって作成されたエスケープ文字を使用します。ところで あなたはechos.bat
...いくつかの最適化の可能性を秘めている
上記のコメントで指摘されている問題に対処するための回答を追加します。そのインラインansiカラーコードは、FORループ内(実際には、括弧で囲まれたコードブロック内)で誤動作する可能性があります。 以下の.batコードは、(1)インラインカラーコードの使用、(2)インラインカラーコードがFORループまたは括弧で囲まれたコードブロック内で使用された場合に発生する可能性があるカラーエラー、および(3)の解決策を示しています。問題。 .batコードが実行されると、テスト2と3はカラーコードの失敗を示し、テスト4はソリューションを実装しているため失敗はありません。
[編集2020-04-07:サブルーチンを呼び出すよりもおそらくもっと効率的な別の解決策を見つけました。次の行のように、FINDSTR句を括弧で囲みます。
echo success | (findstr /R success)
ENDEDIT]
注:私の(制限された)経験では、カラーコードの問題は、入力がコードブロック内のFINDSTRにパイプされた後にのみ現れます。これが、次の.batが問題を再現する方法です。 色コードの問題は、FINDSTRにパイプした後よりも一般的である可能性があります。誰かが問題の性質を説明できて、それを解決するより良い方法があれば、私はそれを感謝します。
@goto :main
:resetANSI
EXIT /B
rem The resetANSI subroutine is used to fix the colorcode
rem bug, even though it appears to do nothing.
:main
@echo off
setlocal EnableDelayedExpansion
rem Define some useful colorcode vars:
for /F "delims=#" %%E in ('"prompt #$E# & for %%E in (1) do rem"') do set "ESCchar=%%E"
set "green=%ESCchar%[92m"
set "yellow=%ESCchar%[93m"
set "magenta=%ESCchar%[95m"
set "cyan=%ESCchar%[96m"
set "white=%ESCchar%[97m"
set "black=%ESCchar%[30m"
echo %white%Test 1 is NOT in a FOR loop nor within parentheses, and color works right.
echo %yellow%[Test 1] %green%This is Green, %magenta%this is Magenta, and %yellow%this is Yellow.
echo %Next, the string 'success' will be piped to FINDSTR...
echo success | findstr /R success
echo %magenta%This is magenta and FINDSTR found and displayed 'success'.%yellow%
echo %green%This is green.
echo %cyan%Test 1 completed.
echo %white%Test 2 is within parentheses, and color stops working after the pipe to FINDSTR.
( echo %yellow%[Test 2] %green%This is Green, %magenta%this is Magenta, and %yellow%this is Yellow.
echo %Next, the string 'success' will be piped to FINDSTR...
echo success | findstr /R success
echo %magenta%This is supposed to be magenta and FINDSTR found and displayed 'success'.
echo %green%This is supposed to be green.
)
echo %cyan%Test 2 completed.
echo %white%Test 3 is within a FOR loop, and color stops working after the pipe to FINDSTR.
for /L %%G in (3,1,3) do (
echo %yellow%[Test %%G] %green%This is Green, %magenta%this is Magenta, and %yellow%this is Yellow.
echo %Next, the string 'success' will be piped to FINDSTR...
echo success | findstr /R success
echo %magenta%This is supposed to be magenta and FINDSTR found and displayed 'success'.
echo %green%This is supposed to be green.
)
echo %cyan%Test 3 completed.
echo %white%Test 4 is in a FOR loop but color works right because subroutine :resetANSI is
echo called after the pipe to FINDSTR, before the next color code is used.
for /L %%G in (4,1,4) do (
echo %yellow%[Test %%G] %green%This is Green, %magenta%this is Magenta, and %yellow%this is Yellow.
echo %Next, the string 'success' will be piped to FINDSTR...
echo success | findstr /R success
call :resetANSI
echo %magenta%This is magenta and FINDSTR found and displayed 'success'.
echo %green%This is green.
)
echo %cyan%Test 4 completed.%white%
EXIT /B
cechoを使用できます。.choを使用してスクリプトに直接埋め込むこともできるため、.comや.exeを持ち歩く必要はありません。
http://www.codeproject.com/Articles/17033/Add-Colors-to-Batch-Files
Win 7 HomeからWin 10 Proに変換し、他のバッチから呼び出したバッチを置き換えて、情報をカラーでエコーしたいと思いました。上記の内容を確認すると、以前のバッチを直接置き換える次のものを使用します。スペースを含むメッセージを使用できるように、メッセージに「〜」を追加することに注意してください。コードを覚える代わりに、必要な色の文字を使用します。
%2にスペースが含まれている場合は、「...」が必要です。%1黒に強い色:R =赤G =緑Y =黄色W =白
ECHO OFF
IF "%1"=="R" ECHO ^[91m%~2[0m
IF "%1"=="G" ECHO ^[92m%~2[0m
IF "%1"=="Y" ECHO ^[93m%~2[0m
IF "%1"=="W" ECHO ^[97m%~2[0m
テキストの色を変更するには、ANSIエスケープコードシーケンスをエコーする必要があります。http://en.wikipedia.org/wiki/ANSI_escape_code
これらのエスケープコードの別の非常に優れたソースは、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.
グレンSlaydenはで言ったこの答えは、CMD「よりカラフル」にするために、レジストリに適切な値を追加することができます。
さいわい、グローバルデフォルトはオプトインからオプトアウトに変更できます。HKEY_CURRENT_USER \ Console \ VirtualTerminalLevelのレジストリキーは、ANSIエスケープシーケンスを処理するためのグローバルなデフォルトの動作を設定します。DWORDキーを作成し(必要な場合)、その値を1に設定して、デフォルトでANSI処理をグローバルに有効(または無効にするには `)にします。
powershellのログステートメントに色を設定することは大したことではありません。-ForegroundColor
パラメータ
を使用できます。
確認メッセージを書きます。
Write-Host "Process executed Successfully...." -ForegroundColor Magenta
エラーメッセージを書きます。
Write-Host "Sorry an unexpected error occurred.." -ForegroundColor Red
進捗メッセージを書く。
Write-Host "Working under pocess..." -ForegroundColor Green
call :color_echo "blue" "blue txt"
call :color_echo "red" "red txt"
echo "white txt"
REM : https://www.robvanderwoude.com/ansi.php
:color_echo
@echo off
set "color=%~1"
set "txt=%~2"
set ESC=
set black=%ESC%[30m
set red=%ESC%[31m
set green=%ESC%[32m
set yellow=%ESC%[33m
set blue=%ESC%[34m
set magenta=%ESC%[35m
set cyan=%ESC%[36m
set white=%ESC%[37m
if "%~1" == "black" set "color=!black!"
if "%~1" == "red" set "color=!red!"
if "%~1" == "green" set "color=!green!"
if "%~1" == "yellow" set "color=!yellow!"
if "%~1" == "blue" set "color=!blue!"
if "%~1" == "magenta" set "color=!magenta!"
if "%~1" == "cyan" set "color=!cyan!"
if "%~1" == "white" set "color=!white!"
echo | set /p="!color!!txt!"
echo.
REM : return to standard white color
echo | set /p="!white!"
REM : exiting the function only
EXIT /B 0
%ESC%
空なので、これは機能しません。echo !white!
色を白に設定します。デフォルトの色に戻すには(ユーザー設定が何であれ):color
パラメーターなしのコマンドはそれを行います。
私たちはこれをANSI端末コードで行っていました。それでも機能するかどうかはわかりませんが、試すことができます。
colorコマンドを使用して、コンソール全体の色を変更できます
Color 0F
白黒です
Color 0A
黒と緑です