나는 color bf
명령이 전체 명령 줄 창의 색상을 설정 있지만 한 줄을 다른 색상으로 인쇄하고 싶었습니다.
나는 color bf
명령이 전체 명령 줄 창의 색상을 설정 있지만 한 줄을 다른 색상으로 인쇄하고 싶었습니다.
답변:
한 줄을 다른 색상으로 인쇄하고 싶었습니다.
ANSI 이스케이프 시퀀스를 사용하십시오.
10 이전 Windows-콘솔에서 ANSI 색상을 기본적으로 지원하지 않음
Windows 버전 10 미만의 경우 Windows 명령 콘솔은 기본적으로 출력 색상을 지원하지 않습니다. Cmder , ConEmu , ANSICON 또는 Mintty를 설치할 수 있습니다 (GitBash와 Cygwin에서에서 기본적으로 사용되는) 당신의 Windows 명령 콘솔에 지원을 착색 추가 할 수 있습니다.
Windows 10-명령 줄 색상
Windows 10부터 Windows 콘솔은 기본적으로 ANSI 이스케이프 시퀀스 및 일부 색상을 지원합니다. 이 기능은 2015 년 11 월 Threshold 2 업데이트와 함께 제공되었습니다.
업데이트 (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
)입니다. 설치). 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
부분. 노트북에있을 때의 또 다른 요령은 위의 줄을 파일로 리디렉션하여 시작한 다음 잘라내어 붙여 넣습니다.
echo echo ^[[32m HI ^[[0m >> batch_file.cmd
\033
하지 않습니다 .. 또한 시도 했지만 nope ... Java로 어떻게 할 수 있습니까?
인쇄 할 단어의 이름으로 파일을 만들고 컬러로 인쇄 할 수있는 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 /?
색상 목록을 얻으려면 실행하십시오 .
이전 버전의 Windows에서 ANSICON 을 사용하여 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 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
이미 250 개 이상의 공감대가있는 답변이 있습니다. 내가 여전히 기여하는 이유는escape
에코 작업에 필요한 문자가 많은 편집자 (예 : MS 코드를 사용하고 있음)에서 받아들이지 않고 다른 모든 솔루션에는 타사 (Windows 기본이 아닌) 소프트웨어가 필요하기 때문입니다.
일반 배치 명령 만 사용 PROMPT
하는 해결 방법은 대신을 사용 하고 ECHO
있습니다. 이 PROMPT
명령은 모든 escape
문자를 편집하기 쉬운 방식으로 $E
문자 순서 로 받아들 입니다. ( ASCII Escape 코드Esc
에서 간단히 교체 )를로 바꿉니다$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
참고 : 유일한 단점은이 기술이 사용자 cmd 색상 설정과 충돌한다는 것입니다 (color
명시 적으로 알려지지 않은 경우 명령 또는 설정) 입니다.
-처음에 언급 한 이유로 thi가 허용되는 유일한 솔루션이므로 이것이 도움이되기를 바랍니다. -
편집하다:
의견을 바탕으로 @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
명령이 하위 프로세스에서 실행 되기 때문에 ). Btw. 당신의 echos.bat
최적화 가능성이 있습니다 ...
위의 일부 주석에서 언급 된 문제를 해결하기위한 답변을 추가하고 있습니다. 인라인 ansi 색상 코드는 FOR 루프 내부 (실제로 괄호 안에있는 코드 블록 내)에서 오작동 할 수 있습니다. 아래 .bat 코드는 (1) 인라인 색상 코드 사용, (2) 인라인 색상 코드가 FOR 루프 또는 괄호 안에있는 코드 블록 내에서 사용될 때 발생할 수있는 색상 오류 및 (3) 문제. .bat 코드가 실행될 때 테스트 2와 3은 색상 코드 오류를 보여주고 테스트 4는 솔루션을 구현하므로 오류가 없음을 보여줍니다.
[EDIT 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.를 사용할 수 있습니다. .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 폴더로 이동하십시오 .
사용하려면 색상을 설정하기 위해 두 개의 문자 코드를 사용해야합니다 (예 : 01
not) 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 진수입니다. 예를 들어 Red + Blue + FG Intensity = 13 = D와 같이 추가 할 수 있습니다. 10+를 사용하지 않으면 배경이 검은 색이됩니다. 색상 코드는 2 자 여야합니다 (예 : 08
not) 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 키를 작성하고 (필요한 경우) 기본적으로 ANSI 처리를 전체적으로 사용 가능하게하거나 0을 사용 불가능하게하려면 값을 1로 설정하십시오.
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
검은 색과 녹색