Je sais que la color bf
commande définit les couleurs de toute la fenêtre de ligne de commande, mais je voulais imprimer une seule ligne dans une couleur différente.
Je sais que la color bf
commande définit les couleurs de toute la fenêtre de ligne de commande, mais je voulais imprimer une seule ligne dans une couleur différente.
Réponses:
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 Cmder , ConEmu , ANSICON ou Mintty (utilisé par défaut dans GitBash et Cygwin) pour ajouter un support de coloration à votre console de commande Windows.
Windows 10 - Couleurs de 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é a été livrée avec la mise à jour Threshold 2 en novembre 2015.
Mise à jour (05-2019): ColorTool vous permet de changer le jeu de couleurs de la console. Cela fait partie du projet Microsoft Terminal .
Démo
Commande par lots
Le a win10colors.cmd
é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
.cmd
ou .bat
- les deux devraient fonctionner. Mais, je pense que je sais pourquoi cela ne fonctionne pas: il semble que le symbole d'échappement soit supprimé lors de la publication sur StackOverflow. Veuillez ne pas copier le contenu de ma réponse, utilisez plutôt le contenu d'ici: gist.githubusercontent.com/mlocati/…
ESC
bloc-notes ++ auparavant ... Vous pouvez le faire avec des codes ALT en utilisant le pavé numérique et la touche ALT gauche: L-ALT
+ 0
+ 2
+7
ESC
personnage dans un fichier batch de cette façon:for /F %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a"
Ceci est un auto-compilé hybride bat / .net (doit être enregistré sous .BAT
) qui peut être utilisé sur n'importe quel système qui a installé le framework .net (il est rare de voir une fenêtre sans framework .NET même pour le plus ancien XP / 2003 installations). Il utilise le compilateur jscript.net pour créer un exe capable d'imprimer des chaînes avec différentes couleurs d'arrière-plan / de premier plan uniquement pour la ligne actuelle.
@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 savez que le poste de travail cible a Powershell, vous pouvez faire quelque chose comme ça (en supposant que le 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 j'ai pensé que je clarifierais et simplifierais un peu
PowerShell est désormais inclus dans toutes les versions de Windows depuis 7. Par conséquent, la syntaxe de cette réponse peut être raccourcie en une forme 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 sont disponibles dans la
- PowerShell Documentation forWrite-Host
Windows 10 - TH2 et supérieur:
(aka Version 1511, build 10586, version 2015-11-10)
À l'invite de commande:
echo ^[[32m HI ^[[0m
Utilisation des touches réelles: écho 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 l'enregistrer dans le bloc-notes, vous pouvez taper ESC dedans en utilisant: Alt+ 027
avec le pavé numérique, puis la [32m
partie. 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
\033
mais non ... comment pourrais-je faire cela en Java?
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 les anciennes versions de Windows. Il existe des versions 32 et 64 bits que j'ai utilisées dans Windows XP et Windows 7.
J'étais ennuyé par le manque de coloration appropriée dans cmd aussi, alors j'ai continué et j'ai créé cmdcolor . C'est juste un proxy standard, 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
.
cmdcolor.exe; PE32 executable for MS Windows (console) Intel 80386 32-bit
upx
. Pourriez-vous me contacter par e-mail, s'il vous plaît?
J'ai regardé cela parce que je voulais introduire des couleurs de texte simples dans un fichier batch Win7. C'est ce que j'ai trouvé. 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
Il y a déjà une réponse acceptée avec plus de 250 votes positifs. La raison pour laquelle je continue de contribuer est que leescape
caractère requis pour l'écho n'est pas accepté par de nombreux éditeurs (j'utilise, par exemple, MS Code) et toutes les autres solutions nécessitent des logiciels tiers (non par défaut de Windows).
La solution de contournement avec l'utilisation de commandes batch simples utilise PROMPT
plutôt que ECHO
. La PROMPT
commande accepte le escape
caractère d'une manière compatible avec n'importe quel éditeur en tant que $E
séquence de caractères. (Remplacez simplement le Esc
dans les codes d'échappement ASCII ) par $E
.
Voici un code de démonstration:
@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
Remarque: le seul inconvénient est que cette technique entre en collision avec les paramètres de couleur cmd utilisateur ( color
commande ou paramètres) si elle n'est pas connue explicitement.
- J'espère que cela aide car c'est la seule solution acceptable pour moi pour les raisons mentionnées au début. -
ÉDITER:
Sur la base des commentaires, je joins un autre extrait inspiré de @Jeb. Il:
ECHO
commandes "natives"PROMPT
valeur localeECHO
sortie affecte inévitablement la PROMPT
couleur, de sorte que la couleur doit être réinitialisée de toute façon@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
utilisé dans batcolors / echo.bat "?
set ASCII27=←
par for /F "delims=#" %%E in ('"prompt #$E# & for %%E in (1) do rem"') do set "ASCII27=%%E"
. Cela utilise le caractère d'échappement créé par la commande d'invite, sans modifier définitivement l'invite (car la prompt
commande est exécutée dans un processus enfant). Btw. Vous avez echos.bat
un certain potentiel d'optimisation ...
J'ajoute une réponse pour résoudre un problème noté dans certains commentaires ci-dessus: les codes de couleur ansi en ligne peuvent mal se comporter lorsqu'ils sont à l'intérieur d'une boucle FOR (en fait, dans n'importe quel bloc de code entre parenthèses). Le code .bat ci-dessous illustre (1) l'utilisation de codes de couleur en ligne, (2) l'échec de la couleur qui peut se produire lorsque des codes de couleur en ligne sont utilisés dans une boucle FOR ou dans un bloc de code entre parenthèses, et (3) une solution pour le problème. Lorsque le code .bat s'exécute, les tests 2 et 3 montrent l'échec du code couleur et le test 4 ne montre aucune défaillance car il implémente la solution.
[EDIT 2020-04-07: J'ai trouvé une autre solution qui est probablement plus efficace que d'appeler un sous-programme. Mettez la phrase FINDSTR entre parenthèses, comme dans la ligne suivante:
echo success | (findstr /R success)
ENDEDIT]
Remarque: D'après mon expérience (limitée), le problème du code couleur ne se manifeste qu'après que l'entrée a été canalisée vers FINDSTR à l'intérieur du bloc de code. C'est ainsi que le .bat suivant reproduit le problème. Il est possible que le problème du code couleur soit plus général qu'après le raccordement à FINDSTR. Si quelqu'un peut expliquer la nature du problème et s'il existe une meilleure façon de le résoudre, je l'apprécierais.
@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
vous pouvez utiliser cecho .. vous pouvez également l'utiliser pour l'intégrer directement dans votre script afin que vous n'ayez pas à emporter un .com ou un .exe
http://www.codeproject.com/Articles/17033/Add-Colors-to-Batch-Files
Je viens de passer de Win 7 Home à Win 10 Pro et je voulais remplacer le lot que j'appelle d'autres lots pour faire écho aux informations en couleur. En examinant ce qui est discuté ci-dessus, j'utilise ce qui suit qui remplacera directement mon lot précédent. REMARQUE l'ajout de "~" au message afin que les messages avec des espaces puissent être utilisés. Au lieu de me souvenir des codes, j'utilise des lettres pour les couleurs dont j'avais besoin.
Si% 2 contient des espaces, il faut "..."% 1 Couleurs fortes sur le noir: R = rouge G = VERT Y = JAUNE W = BLANC
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
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
Mettez 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 commandes.
"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 l'utiliser, vous devez utiliser deux codes de caractères pour définir la couleur, par exemple 01
pas 1
.
ColourText ColourOfText ColourOfTextWhenFinished Text
EG Pour mettre du bleu sur blanc en ne passant aucun texte, puis du rouge sur du texte blanc, en terminant par du bleu sur 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 CLS
commande devient également intéressante. Color
La commande sans paramètres réinitialise toutes les couleurs aux couleurs de démarrage.
Pour obtenir le code couleur, additionnez les nombres suivants. Utilisez la calculatrice en mode programmeurs. Ce sont des nombres hexadécimaux. Ils peuvent être ajoutés ensemble, par exemple rouge + bleu + intensité FG = 13 = D. Comme 10+ n'a pas été utilisé, l'arrière-plan sera noir. Les codes de couleur DOIVENT être composés de deux caractères, par exemple 08
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 obtenir ce travail sur Windows 10, vous pouvez activer cette option: ENABLE_VIRTUAL_TERMINAL_PROCESSING
.
Avec cette clé de registre, vous pouvez définir cela par défaut
[HKCU\Console] VirtualTerminalLevel dword 0x1
Comme Glenn Slayden l'a dit 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 l'opt-in à l'opt-out. La clé de Registre dans HKEY_CURRENT_USER \ Console \ VirtualTerminalLevel définit le comportement par défaut global pour le 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.
Définir la couleur des instructions de journal dans PowerShell n'est pas un gros problème.
vous pouvez utiliser le -ForegroundColor
paramètre.
Pour écrire un message de confirmation.
Write-Host "Process executed Successfully...." -ForegroundColor Magenta
Pour écrire un message d'erreur.
Write-Host "Sorry an unexpected error occurred.." -ForegroundColor Red
Pour écrire un message de progression .
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%
est vide, donc cela ne fonctionnera pas. echo !white!
définit la couleur sur blanc. Pour revenir aux couleurs par défaut (quels que soient les paramètres utilisateurs pour cela): la color
commande sans paramètres le fait.
Nous le faisions avec les codes de terminal ANSI . Je ne sais pas s'ils fonctionnent toujours, mais vous pouvez les essayer.
Vous pouvez utiliser la commande color pour changer la couleur de la console entière
Color 0F
Est en noir et blanc
Color 0A
Est noir et vert