Saya tahu bahwa color bf
perintah mengatur warna seluruh jendela baris perintah tapi saya ingin mencetak satu baris dalam warna yang berbeda.
Saya tahu bahwa color bf
perintah mengatur warna seluruh jendela baris perintah tapi saya ingin mencetak satu baris dalam warna yang berbeda.
Jawaban:
Saya ingin mencetak satu baris dalam warna yang berbeda.
Gunakan Sequence Escape ANSI.
Windows sebelum 10 - tidak ada dukungan asli untuk warna ANSI di konsol
Untuk versi Windows di bawah 10, konsol perintah Windows tidak mendukung pewarnaan keluaran secara default. Anda dapat menginstal Cmder , ConEmu , ANSICON atau Mintty (digunakan secara default di GitBash dan Cygwin) untuk menambahkan dukungan pewarnaan ke konsol perintah Windows Anda.
Windows 10 - Warna Baris Perintah
Mulai dari Windows 10, konsol Windows mendukung ANSI Escape Sequences dan beberapa warna secara default. Fitur yang dikirimkan dengan Pembaruan Threshold 2 pada November 2015.
Pembaruan (05-2019): ColorTool memungkinkan Anda untuk mengubah skema warna konsol. Itu bagian dari proyek Terminal Microsoft .
Demo
Perintah Batch
Itu win10colors.cmd
ditulis oleh Michele 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
atau .bat
- keduanya harus bekerja. Tapi, saya pikir saya tahu mengapa itu tidak berhasil: sepertinya simbol pelepasan dihapus ketika memposting ke StackOverflow. Tolong jangan menyalin konten dari jawaban saya, gunakan konten dari sini sebagai gantinya: gist.githubusercontent.com/mlocati/…
ESC
notepad ++ sebelum ... Anda dapat melakukan ini dengan ALT-codes menggunakan numpad dan tombol ALT kiri: L-ALT
+ 0
+ 2
+7
ESC
karakter dalam file Batch dengan cara ini:for /F %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a"
Ini adalah kelelawar / .net hybrid yang dikompilasi sendiri (harus disimpan sebagai .BAT
) yang dapat digunakan pada sistem apa pun yang telah menginstal kerangka kerja .net (jarang terjadi melihat jendela tanpa .NET framework bahkan untuk XP / 2003 tertua) instalasi). Menggunakan kompiler jscript.net untuk membuat exe yang mampu mencetak string dengan warna latar / latar depan yang berbeda hanya untuk baris saat ini.
@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;
Inilah pesan bantuan:
Contoh :
coloroutput.bat -s "aa\nbb\n\u0025cc" -b 10 -f 3 -n -e
Anda juga dapat menemukan skrip ini di sini .
Anda juga dapat memeriksa fungsi warna carlos -> http://www.dostips.com/forum/viewtopic.php?f=3&t=4453
Ini bukan jawaban yang bagus, tetapi jika Anda tahu workstation target memiliki Powershell, Anda dapat melakukan sesuatu seperti ini (dengan asumsi skrip BAT / CMD):
CALL:ECHORED "Print me in red!"
:ECHORED
%Windir%\System32\WindowsPowerShell\v1.0\Powershell.exe write-host -foregroundcolor Red %1
goto:eof
Ini jawaban lama tapi saya pikir saya akan menjelaskan & menyederhanakan sedikit
PowerShell sekarang termasuk dalam semua versi Windows sejak 7. Oleh karena itu sintaks untuk jawaban ini dapat disingkat menjadi bentuk yang lebih sederhana:
-fore
sebagai ganti-foregroundcolor
-back
sebagai ganti-backgroundcolor
echo
powershell write-host -fore Cyan This is Cyan text
powershell write-host -back Red This is Red background
Daftar lengkap warna dan informasi lebih lanjut tersedia di
- Dokumentasi PowerShell untukWrite-Host
Windows 10 - TH2 dan lebih tinggi:
(alias Versi 1511, build 10586, rilis 2015-11-10)
Di Command Prompt:
echo ^[[32m HI ^[[0m
Menggunakan kunci aktual: echo Ctrl+ [[32m HI
Ctrl+[[0m
Enter
Anda akan melihat "HI" hijau di bawahnya.
Nomor kode dapat ditemukan di sini:
Notepad:
Untuk menyimpan ini ke notepad, Anda dapat mengetik ESC ke dalamnya menggunakan: Alt+ 027
dengan numpad, lalu [32m
bagian. Trik lain ketika saya menggunakan laptop, arahkan ulang baris di atas ke file untuk memulai, kemudian potong dan tempel:
echo echo ^[[32m HI ^[[0m >> batch_file.cmd
\033
tetapi tidak ... bagaimana saya bisa melakukan ini di Jawa?
Anda cukup membuat file dengan nama kata yang akan dicetak, menggunakan findstr yang dapat mencetak dalam warna, dan kemudian menghapus file. Coba contoh ini:
@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
Jalankan color /?
untuk mendapatkan daftar warna.
Anda bisa menggunakan ANSICON untuk mengaktifkan kode terminal ANSI di versi Windows yang lebih lama. Ada versi 32 dan 64 bit yang saya gunakan di Windows XP dan Windows 7.
Saya terganggu oleh kurangnya pewarnaan yang tepat dalam cmd juga, jadi saya pergi ke depan dan membuat cmdcolor . Itu hanya proksi stdout, yang mencari sekumpulan rangkaian kontrol ANSI / VT100 yang terbatas (dengan kata lain, seperti dalam bash), yaitu echo \033[31m RED \033[0m DEFAULT | cmdcolor.exe
.
cmdcolor.exe; PE32 executable for MS Windows (console) Intel 80386 32-bit
upx
. Bisakah Anda menghubungi saya melalui surel?
Saya melihat ini karena saya ingin memperkenalkan beberapa warna teks sederhana ke file Batch Win7. Inilah yang saya pikirkan. Terima kasih atas bantuan Anda.
@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
Ada jawaban yang diterima dengan lebih dari 250 suara positif. Alasan saya masih berkontribusi adalah karenaescape
karakter yang diperlukan untuk echo tidak diterima oleh banyak editor (saya menggunakan, misalnya, MS Code) dan semua solusi lain memerlukan beberapa perangkat lunak pihak ketiga (non-Windows-default).
Mengatasi hanya menggunakan perintah batch biasa menggunakan PROMPT
bukan ECHO
. The PROMPT
perintah menerima escape
karakter dengan cara-apa-editor yang ramah sebagai $E
urutan karakter. (Cukup ganti Esc
dalam kode Escape ASCII ) dengan $E
.
Berikut ini adalah kode demo:
@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
CATATAN: Satu-satunya kelemahan adalah bahwa teknik ini bertabrakan dengan pengaturan warna cmd pengguna (color
perintah atau pengaturan) jika tidak dikenal secara eksplisit.
- Semoga ini bisa membantu karena ini adalah satu-satunya solusi yang dapat diterima untuk saya karena alasan yang disebutkan di awal. -
EDIT:
Berdasarkan komentar, saya melampirkan cuplikan lain yang terinspirasi oleh @Jeb. Itu:
ECHO
perintah "asli"PROMPT
nilai lokalECHO
keluaran pasti mempengaruhi PROMPT
warna sehingga warnanya harus diatur ulang@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
digunakan dalam batcolors / echo.bat "?
set ASCII27=←
dengan Anda for /F "delims=#" %%E in ('"prompt #$E# & for %%E in (1) do rem"') do set "ASCII27=%%E"
. Ini menggunakan karakter pelarian yang dibuat oleh perintah prompt, tanpa mengubah prompt secara permanen (karena prompt
perintah dijalankan dalam proses anak). Btw. Anda echos.bat
memiliki beberapa potensi optimasi ...
Saya menambahkan jawaban untuk mengatasi masalah yang dicatat dalam beberapa komentar di atas: bahwa kode warna ansi inline dapat berperilaku tidak benar ketika berada di dalam loop FOR (sebenarnya, di dalam blok kode yang diapit). Kode .bat di bawah ini menunjukkan (1) penggunaan kode warna inline, (2) kegagalan warna yang dapat terjadi ketika kode warna inline digunakan dalam loop FOR atau dalam blok kode yang diapit, dan (3) solusi untuk masalah. Ketika kode .bat dijalankan, tes 2 dan 3 menunjukkan kegagalan kode warna, dan tes 4 tidak menunjukkan kegagalan karena mengimplementasikan solusi.
[EDIT 2020-04-07: Saya menemukan solusi lain yang mungkin lebih efisien daripada memanggil subrutin. Lampirkan frasa FINDSTR dalam tanda kurung, seperti pada baris berikut:
echo success | (findstr /R success)
ENDEDIT]
Catatan: Dalam pengalaman saya (terbatas), masalah kode warna hanya muncul setelah input disalurkan ke FINDSTR di dalam blok kode. Begitulah cara .bat berikut mereproduksi masalah. Mungkin masalah kode warna lebih umum daripada setelah pemipaan ke FINDSTR. Jika seseorang dapat menjelaskan sifat masalahnya, dan jika ada cara yang lebih baik untuk menyelesaikannya, saya akan menghargainya.
@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
Anda bisa menggunakan cecho .. Anda juga dapat menggunakannya untuk menanamkan langsung ke skrip Anda sehingga Anda tidak perlu membawa .com atau .exe
http://www.codeproject.com/Articles/17033/Add-Colors-to-Batch-Files
Saya baru saja mengkonversi dari Win 7 Home ke Win 10 Pro dan ingin mengganti batch yang saya panggil dari batch lain untuk menggemakan info dalam warna. Meninjau apa yang dibahas di atas, saya menggunakan yang berikut ini yang akan langsung menggantikan batch saya sebelumnya. Perhatikan penambahan "~" pada pesan sehingga pesan dengan spasi dapat digunakan. Alih-alih mengingat kode saya menggunakan huruf untuk warna yang saya butuhkan.
Jika% 2 berisi spasi membutuhkan "..."% 1 Warna Kuat pada hitam: R = Merah G = HIJAU Y = KUNING W = PUTIH
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
Anda harus mengulang urutan kode pelarian ANSI untuk mengubah warna teks: http://en.wikipedia.org/wiki/ANSI_escape_code
Sumber lain yang sangat bagus dari kode pelarian ini adalah http://ascii-table.com/ansi-escape-afterences.php
Masukkan baris berikut ke dalam file yang dipanggil ColourText.bas
di desktop Anda.
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
Simpan dan ketikkan yang berikut ini di prompt perintah.
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc.exe" /target:exe /out:"%userprofile%\desktop\ColourText.exe" "%userprofile%\desktop\ColourText.bas" /verbose
File bernama ColourText.exe akan muncul di desktop Anda. Pindahkan ke folder Windows .
Untuk menggunakan Anda harus menggunakan dua kode karakter untuk mengatur warna misalnya 01
tidak 1
.
ColourText ColourOfText ColourOfTextWhenFinished Text
EG Untuk mengatur biru pada putih dengan tidak melewatkan teks apa pun, lalu merah pada teks putih, diakhiri dengan biru pada abu-abu.
ColourText F1 F1
ColourText F2 71 This is green on white
atau
ColourText F1 F1
cls
ColourText F4 F4
Echo Hello
Echo Hello today
ColourText F1 F1
Juga CLS
perintahnya menjadi menarik. Color
perintah tanpa parameter me-reset semua warna ke warna startup.
Untuk mendapatkan kode warna, tambahkan angka-angka berikut bersama-sama. Gunakan Kalkulator dalam mode programmer. Ini adalah angka hex. Mereka dapat ditambahkan bersama misalnya Merah + Biru + FG Intensitas = 13 = D. Karena 10+ tidak digunakan latar belakang akan menjadi hitam. Kode warna HARUS dua karakter, misalnya 08
tidak 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.
Untuk mendapatkan kerja ini pada Windows 10, Anda dapat mengaktifkan bendera ini: ENABLE_VIRTUAL_TERMINAL_PROCESSING
.
Dengan kunci registri ini Anda dapat mengatur ini secara default
[HKCU\Console] VirtualTerminalLevel dword 0x1
Seperti yang dikatakan Glenn Slayden dalam jawaban ini , Anda dapat menambah nilai yang tepat pada registri untuk membuat cmd "lebih berwarna".
Untungnya, standar global dapat diubah dari opt-in ke opt-out. Kunci registri di HKEY_CURRENT_USER \ Console \ VirtualTerminalLevel menetapkan perilaku default global untuk memproses urutan pelarian ANSI. Buat kunci DWORD (jika perlu) dan tetapkan nilainya ke 1 untuk mengaktifkan (atau 0 untuk menonaktifkan`) pemrosesan ANSI secara default.
Mengatur warna pada pernyataan log di PowerShell bukan teman yang penting.
Anda dapat menggunakan -ForegroundColor
parameter.
Untuk menulis pesan konfirmasi.
Write-Host "Process executed Successfully...." -ForegroundColor Magenta
Untuk menulis pesan kesalahan.
Write-Host "Sorry an unexpected error occurred.." -ForegroundColor Red
Untuk menulis pesan progres .
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%
kosong, jadi ini tidak akan berfungsi. echo !white!
mengatur warna menjadi putih. Untuk kembali ke warna default (apa pun pengaturan pengguna untuk itu): color
perintah tanpa parameter melakukan itu.
Kami biasa melakukan ini dengan kode terminal ANSI . Tidak yakin apakah mereka masih berfungsi, tetapi Anda bisa mencobanya.
Anda dapat menggunakan perintah warna untuk mengubah warna seluruh konsol
Color 0F
Hitam dan putih
Color 0A
Hitam dan hijau