Я знаю, что color bf
команда устанавливает цвета всего окна командной строки, но я хотел напечатать одну строку другим цветом.
Я знаю, что color bf
команда устанавливает цвета всего окна командной строки, но я хотел напечатать одну строку другим цветом.
Ответы:
Я хотел напечатать одну строку другим цветом.
Используйте ANSI Escape-последовательности.
Windows до 10 - нет встроенной поддержки цветов ANSI на консоли
Для версии ниже 10 консоль Windows не поддерживает раскраску по умолчанию. Вы можете установить Cmder , ConEmu , ANSICON или Mintty (используется по умолчанию в GitBash и Cygwin), чтобы добавить поддержку окраски в командную консоль Windows.
Windows 10 - цвета командной строки
Начиная с Windows 10, консоль Windows поддерживает ANSI Escape-последовательности и некоторые цвета по умолчанию. Эта функция поставляется с обновлением Threshold 2 в ноябре 2015 года.
Обновление (05-2019): ColorTool позволяет изменять цветовую схему консоли. Это часть проекта Microsoft Terminal .
демонстрация
Пакетная команда
Это win10colors.cmd
было написано Микеле Локати :
@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
- оба должны работать. Но, я думаю, я знаю, почему это не работает: кажется, что символ escape удаляется при публикации в StackOverflow. Пожалуйста, не копируйте содержание из моего ответа, используйте его здесь: gist.githubusercontent.com/mlocati/…
ESC
Раньше мне никогда не приходилось генерировать в notepad ++ ... Это можно сделать с помощью ALT-кодов, используя цифровую клавиатуру и левую клавишу ALT: L-ALT
+ 0
+ 2
+7
ESC
персонажа в for /F %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a"
Это самоскомпилированный гибрид bat / .net (должен быть сохранен как .BAT
), который можно использовать в любой системе с установленной средой .net (редко можно увидеть окна без платформы .NET даже для самой старой XP / 2003 установки). Он использует компилятор jscript.net для создания исполняемого файла, способного печатать строки с другим цветом фона / переднего плана только для текущей строки.
@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 теперь включен во все версии Windows начиная с 7. Поэтому синтаксис этого ответа может быть сокращен до более простой формы:
-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
Используя фактические ключи: эхо Ctrl+ [[32m HI
Ctrl+[[0m
Enter
Вы должны увидеть зеленый "HI" под ним.
Кодовые номера можно найти здесь:
Блокнот:
Чтобы сохранить это в блокноте, вы можете ввести в него ESC, используя: Alt+ 027
с цифровой клавиатурой, затем [32m
деталь. Еще один трюк, когда я был на ноутбуке, перенаправьте строку выше в файл, чтобы начать, а затем вырезайте и вставляйте:
echo echo ^[[32m HI ^[[0m >> batch_file.cmd
\033
но нет ... как я могу сделать это в 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 /?
чтобы получить список цветов.
Вы можете использовать ANSICON для включения кодов терминала ANSI в более старых версиях Windows. Есть 32- и 64-разрядные версии, которые я использовал в Windows XP и Windows 7.
Меня тоже раздражало отсутствие правильной окраски в cmd, поэтому я решил создать cmdcolor . Это просто стандартный вывод прокси, который выглядит для ограниченного набора управляющих последовательностей ANSI / VT100 (другими словами, как и в Баш), то есть 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
ПРИМЕЧАНИЕ. Единственным недостатком является то, что этот метод вступает в противоречие с пользовательскими настройками цвета cmd ( color
команда или настройки), если они не известны явно.
- Надеюсь, это поможет, так как это единственное решение, приемлемое для меня по причинам, упомянутым в начале. -
РЕДАКТИРОВАТЬ:
Основываясь на комментариях, я прилагаю еще один фрагмент, вдохновленный @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"
echo
используемого в batcolors / echo.bat "?
set ASCII27=←
с for /F "delims=#" %%E in ('"prompt #$E# & for %%E in (1) do rem"') do set "ASCII27=%%E"
. При этом используется управляющий символ, созданный командой приглашения, без постоянного изменения приглашения (поскольку prompt
команда выполняется в дочернем процессе). Btw. У вас 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 .. вы также можете использовать его для встраивания прямо в ваш скрипт, так что вам не нужно носить с собой .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
Чтобы изменить цвет текста, вам нужно будет отобразить последовательность escape-кода ANSI: http://en.wikipedia.org/wiki/ANSI_escape_code
Еще один очень хороший источник этих escape-кодов - http://ascii-table.com/ansi-escape-septions.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
нет 1
.
ColourText ColourOfText ColourOfTextWhenFinished Text
Например, чтобы установить синий на белый, не пропуская текст, затем красный на белый текст, заканчивая синим на сером.
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
Команда без параметров сбрасывает все цвета в стартовые цвета.
Чтобы получить код цвета, сложите следующие цифры. Используйте калькулятор в режиме программистов. Это шестнадцатеричные числа. Их можно добавить вместе, например, Red + Blue + FG Intensity = 13 = D. Поскольку 10+ не использовалось, фон будет черным. Цветовые коды ДОЛЖНЫ быть двумя символами, например, 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
Как сказал Гленн Слэйден в этом ответе , вы можете добавить в реестр правильное значение, чтобы сделать cmd «более красочным».
К счастью, глобальное значение по умолчанию может быть изменено с opt-in на opt-out. Раздел реестра в HKEY_CURRENT_USER \ Console \ VirtualTerminalLevel устанавливает глобальное поведение по умолчанию для обработки escape-последовательностей ANSI. Создайте ключ DWORD (при необходимости) и установите его значение равным 1, чтобы глобально включить (или 0, чтобы отключить`) обработку 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 0F
Черный и белый
Color 0A
Черный и зеленый