[windows] Windows 명령 행에서 다른 색상으로 에코하는 방법

나는 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 업데이트와 함께 제공되었습니다.

MSDN 설명서

업데이트 (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


답변

.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

편집 : (이제 더 간단합니다!)

그것은 오래된 대답이지만 나는 명확히하고 단순화 할 것이라고 생각했습니다.

img

PowerShell 은 이제 7 이후 모든 Windows 버전포함되어 있습니다 . 따라서이 답변의 구문을보다 간단한 형식으로 줄일 수 있습니다.

  • 경로는 이미 환경 변수에 있어야하기 때문에 지정할 필요가 없습니다.
  • 모호하지 않은 명령은 생략 할 수 있습니다 . 예를 들어 다음을 수행 할 수 있습니다.
    • -fore대신에 사용-foregroundcolor
    • -back대신에 사용-backgroundcolor
  • 위와 같이 별도의 배치 파일을 만드는 대신 기본적으로 ‘ inline ‘ 명령을 사용할 수도 있습니다 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+[[0mEnter

아래에 녹색 “HI”가 표시되어야합니다.

코드 번호는 여기에서 찾을 수 있습니다.

메모장 :

: 메모장에이를 저장하려면 사용하여에 ESC를 입력 할 수 있습니다 Alt+를 027누른 다음 숫자 키패드의와 [32m부분. 노트북에있을 때의 또 다른 요령은 위의 줄을 파일로 리디렉션하여 시작한 다음 잘라내어 붙여 넣습니다.

echo echo ^[[32m HI ^[[0m >> batch_file.cmd


답변

인쇄 할 단어의 이름으로 파일을 만들고 컬러로 인쇄 할 수있는 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.

사용법 및 다운로드 .