Я знаю, що color bf
команда встановлює кольори у всьому вікні командного рядка, але мені хотілося надрукувати один рядок іншим кольором.
Я знаю, що color bf
команда встановлює кольори у всьому вікні командного рядка, але мені хотілося надрукувати один рядок іншим кольором.
Відповіді:
Я хотів надрукувати один єдиний рядок іншим кольором.
Використовуйте послідовності втечі ANSI.
Windows до 10 - немає вбудованої підтримки кольорів ANSI на консолі
Для версії Windows нижче 10, командна консоль Windows не підтримує забарвлення виводу за замовчуванням. Ви можете встановити Cmder , ConEmu , ANSICON або Mintty (використовується за замовчуванням у GitBash та Cygwin), щоб додати підтримку забарвлення до вашої командної консолі Windows.
Windows 10 - Кольори командного рядка
Починаючи з Windows 10, консоль Windows за замовчуванням підтримує послідовності втечі ANSI та деякі кольори. Ця функція постачалася з оновленням 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
- обидва повинні працювати. Але, я думаю, я знаю, чому це не працює: здається, що символ втечі видаляється під час публікації в StackOverflow. Будь ласка, не копіюйте вміст з моєї відповіді, використовуйте вміст звідси: gist.githubusercontent.com/mlocati/…
ESC
блокнот ++ раніше ... Ви можете це зробити за допомогою ALT-кодів, використовуючи numpad та ліву клавішу 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 для створення 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 тепер включений у всі версії 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
Використання фактичних клавіш: echo 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 . Це просто 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 Code), а всі інші рішення потребують сторонніх програм (не для Windows за замовчуванням) програмного забезпечення.
Робота з використанням лише простих командних пакетів використовується PROMPT
замість ECHO
. PROMPT
Команда приймає escape
символ в будь-який-редактор дружнім способом , як $E
послідовність символів. (Просто замініть Esc
в кодах ASCII Escape ) на $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
командою чи налаштуваннями), якщо вони чітко не відомі.
- Сподіваюся, що це допомагає, оскільки це єдине прийнятне для мене рішення з причин, зазначених на початку. -
Редагувати:
На підставі коментарів я додаю ще один фрагмент, натхненний @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, без постійної зміни підказки (оскільки 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
ні 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
команда без параметрів скидає всі кольори для запуску кольорів.
Щоб отримати колірний код, додайте наступні цифри разом. Використовуйте калькулятор в режимі програмістів. Це шістнадцяткові числа. Їх можна додавати, наприклад, червоний + синій + інтенсивність FG = 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 "більш кольоровим".
На щастя, глобальний стандарт за замовчуванням може бути змінений з відмови на відмову. Ключ реєстру на HKEY_CURRENT_USER \ Console \ VirtualTerminalLevel встановлює глобальну поведінку за замовчуванням для обробки послідовностей аварійного відбору 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, щоб змінити колір всієї консолі
Color 0F
Чорно-біла
Color 0A
Чорний і зелений