Je sais que la commande color bf
définit les couleurs de toute la fenêtre de la ligne de commande, mais je souhaitais imprimer une seule ligne de couleur différente.
Je voulais imprimer une seule ligne dans une couleur différente.
Utilisez les séquences d'échappement ANSI.
Windows avant 10 - pas de prise en charge native des couleurs ANSI sur la console
Pour la version Windows inférieure à 10, la console de commande Windows ne prend pas en charge la coloration de sortie par défaut. Vous pouvez installer soit Cmder , ConEmu , ANSICON ou Mintty (utilisé par défaut dans GitBash et Cygwin) pour ajouter le support de coloration à votre console de commande Windows.
Windows 10 - Couleurs de la ligne de commande
À partir de Windows 10, la console Windows prend en charge les séquences d'échappement ANSI et certaines couleurs par défaut. La fonctionnalité livrée avec la mise à jour Threshold 2 en novembre 2015.
Démo
Commande par lot
Le win10colors.cmd
a été écrit par 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
Ceci est un bat/.net hybride auto-compilé (devrait être enregistré sous le nom .BAT
) et peut être utilisé sur tout système ayant installé le framework .net (il est rare de voir une fenêtre sans le framework .NET même pour les plus anciennes installations XP/2003). Il utilise le compilateur jscript.net pour créer un fichier exe capable d’imprimer des chaînes avec une couleur de fond/premier plan différente pour la ligne en cours uniquement.
@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;
Voici le message d'aide:
Exemple:
coloroutput.bat -s "aa\nbb\n\u0025cc" -b 10 -f 3 -n -e
Vous pouvez également trouver ce script ici .
Vous pouvez également vérifier la fonction de couleur de Carlos -> http://www.dostips.com/forum/viewtopic.php?f=3&t=4453
Ce n'est pas une bonne réponse, mais si vous connaissez le poste de travail cible doté de Powershell, vous pouvez procéder de la sorte (comme dans le cas du script BAT/CMD):
CALL:ECHORED "Print me in red!"
:ECHORED
%Windir%\System32\WindowsPowerShell\v1.0\Powershell.exe write-Host -foregroundcolor Red %1
goto:eof
C'est une vieille réponse mais je me suis dit que je clarifierais et simplifierais un peu
PowerShell est maintenant inclus dans toutes les versions de Windows depuis 7. La syntaxe de cette réponse peut donc être réduite à un formulaire plus simple:
-fore
au lieu de -foregroundcolor
-back
au lieu de -backgroundcolor
echo
powershell write-Host -fore Cyan This is Cyan text
powershell write-Host -back Red This is Red background
La liste complète des couleurs et plus d’informations est disponible dans le
- PowerShell Documentation pour Write-Host
Vous pouvez simplement créer des fichiers avec le nom du mot à imprimer, utiliser findstr qui peut imprimer en couleur, puis effacer le fichier. Essayez cet exemple:
@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
Exécutez color /?
pour obtenir une liste de couleurs.
Vous pouvez utiliser ANSICON pour activer les codes de terminal ANSI dans Windows moderne. J'ai utilisé des versions 32 et 64 bits sous Windows XP et Windows 7.
Windows 10 - TH2 et supérieur:
À l'invite de commande:
echo ^[[32m HI ^[[0m
Utilisation des touches réelles: echo Ctrl+
[[32m HI
Ctrl+[[0m
Enter
Vous devriez voir un "HI" vert en dessous.
Les numéros de code peuvent être trouvés ici:
Bloc-notes:
Pour enregistrer ceci dans le bloc-notes, vous pouvez taper ESC en utilisant: Alt+027
avec le pavé numérique, puis la partie [32m
. Une autre astuce lorsque j'étais sur un ordinateur portable: redirigez la ligne ci-dessus dans un fichier pour commencer, puis coupez et collez:
echo echo ^[[32m HI ^[[0m >> batch_file.cmd
Le manque de couleurs appropriées dans cmd m'a également agacé, alors je suis allé de l'avant et j'ai créé cmdcolor. Il s’agit d’un proxy stdout qui recherche un ensemble limité de séquences de contrôle ANSI/VT100 (en d’autres termes, comme dans bash), c’est-à-dire echo \033[31m RED \033[0m DEFAULT | cmdcolor.exe
.
J'ai regardé cela parce que je voulais introduire des couleurs de texte simples dans un fichier batch Win7. C'est ce que je suis venu avec. Merci de votre aide.
@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
vous pouvez utiliser cecho .. vous pouvez également l'utiliser pour l'intégrer directement dans votre script afin de ne pas avoir à emporter un fichier .com ou .exe
http://www.codeproject.com/Articles/17033/Add-Colors-to-Batch-Files
Vous devrez faire écho à une séquence de code d'échappement ANSI pour modifier la couleur du texte: http://en.wikipedia.org/wiki/ANSI_escape_code
Une autre très bonne source de ces codes d’échappement est http://ascii-table.com/ansi-escape-sequences.php
Placez les lignes suivantes dans un fichier appelé ColourText.bas
sur votre bureau.
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
Enregistrez-le et tapez ce qui suit dans une invite de commande.
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc.exe" /target:exe /out:"%userprofile%\desktop\ColourText.exe" "%userprofile%\desktop\ColourText.bas" /verbose
Un fichier appelé ColourText.exe apparaîtra sur votre bureau. Déplacez-le dans le dossier Windows .
Pour utiliser, vous devez utiliser deux codes de caractères pour définir la couleur, par exemple 01
et non 1
.
ColourText ColourOfText ColourOfTextWhenFinished Text
EG Pour définir le bleu sur le blanc en ne passant aucun texte, puis le rouge sur le texte blanc, en terminant par le bleu sur le gris.
ColourText F1 F1
ColourText F2 71 This is green on white
ou
ColourText F1 F1
cls
ColourText F4 F4
Echo Hello
Echo Hello today
ColourText F1 F1
La commande CLS
devient également intéressante. La commande Color
sans paramètre réinitialise toutes les couleurs en couleurs de démarrage.
Pour obtenir le code de couleur, additionnez les nombres suivants. Utilisez la calculatrice en mode programmeur. Ce sont des nombres hexadécimaux. Ils peuvent être additionnés, par exemple Intensité Rouge + Bleu + FG = 13 = D. Comme 10+ n’a pas été utilisé, l’arrière-plan sera noir. Les codes de couleur DOIVENT contenir deux caractères, par exemple 08
et non 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.
Pour que cela fonctionne sous Windows 10, vous pouvez activer cet indicateur: ENABLE_VIRTUAL_TERMINAL_PROCESSING
.
Avec cette clé de registre, vous pouvez définir ceci par défaut
[HKCU\Console] VirtualTerminalLevel dword 0x1
Comme Glenn Slayden a déclaré dans cette réponse , vous pouvez ajouter au registre la valeur appropriée pour rendre le cmd "plus coloré".
Heureusement, la valeur par défaut globale peut être modifiée de opt-in à opt-out. La clé de registre sous HKEY_CURRENT_USER\Console\VirtualTerminalLevel définit le comportement par défaut global du traitement des séquences d'échappement ANSI. Créez une clé DWORD (si nécessaire) et définissez sa valeur sur 1 pour activer globalement (ou 0 pour désactiver`) le traitement ANSI par défaut.