Batch: entrer le caractère d'échappement au clavier

Fermé
brucine Messages postés 14307 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 24 avril 2024 - 23 mars 2023 à 16:06
brucine Messages postés 14307 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 24 avril 2024 - 24 mars 2023 à 09:29

Bonjour,

Supposons que je veuille colorer non pas le prompt ni totalement la console mais une ligne de texte en particulier, je peux me servir d'une séquence ANSI du type:
 

ECHO ^[34mTaille initiale:[0m

Dans le cas d'espèce, le texte est affiché en bleu (34m) puis réinitialisé (0m) par la syntaxe non pas des crochets mais du caractère d'échappement; on peut le récupérer en mode texte où il apparaît comme un petit rectangle transparent avant les crochets sur certains sites comme par exemple ici (by courtesy of Michele Locati), pas sur le forum CCM qui le zappe systématiquement:

https://gist.githubusercontent.com/mlocati/fdabcaeb8071d5c75a2d51712db24011/raw/b710612d6320df7e146508094e84b92b34c77d48/win10colors.cmd

Pour avoir une idée du résultat, sélectionnez le texte et copiez le dans un fichier que vous renommerez par exemple color.cmd

Il est pénible de devoir le récupérer en ligne (ou en ce qui me concerne dans un fichier archivé) alors qu'il est théoriquement entré par une combinaison au clavier, les deux qui sont documentées sont ALT+027 et CTRL+[ , il n'y en a plus aucune qui marche.

On y parvient par un plan B capillotracté:

for /F "delims=#" %%E in ('"prompt #$E# & for %%E in (1) do rem"') do set "\e=%%E"

et je récupère en copier-coller la variable %\e%, mais pas très pratique.

Je suis donc preneur d'une combinaison clavier qui fonctionne si quelqu'un a l'inspiration.

Merci.

A voir également:

2 réponses

hypothetix Messages postés 190 Date d'inscription dimanche 19 janvier 2020 Statut Membre Dernière intervention 18 avril 2024 51
24 mars 2023 à 07:54

Bonjour,

Il faut utiliser : echo ^[[34mTaille initiale: ^[[0m

Mais curieusement un simple copier coller de ce texte dans la console ne fonctionne pas,
il faut absolument obtenir les deux  ^[  par  ALT+027 ou CTRL+[

Ceci fonctionne sur mon PC en Win 10, à vérifier si c'est reproductible.

@+

0
brucine Messages postés 14307 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 24 avril 2024 1 813
24 mars 2023 à 09:06

Bonjour,

Le copier-coller n'est en effet productif que si le caractère existe déjà dans le texte (c'est le cas du lien que j'ai cité en <1>).

Mais comme je l'ai illustré en <1>, en tout cas chez moi, aucune des combinaisons ALT+027 ou CTRL+[ ne fonctionne, que l'on saisisse ces caractères dans un fichier texte en UTF8 ou en ANSI ensuite enregistré sous cmd ou directement dans un batch cmd.

Par contre la séquence ALT+027 fonctionne correctement à la ligne de commande en m'affichant ^[ (mais sans que
ECHO ^[34mtoto[0m me rende le résultat souhaité).

Le résultat dépend bien sûr du clavier qui doit être à pavé numérique dans le cas ALT+027 et de la cohérence entre la la langue système et le clavier (mais j'ai bien Windows 10 FR et un clavier standard AZERTY FR).

Rob van der Woude nous met la puce à l'oreille en nous disant que la sortie dépend aussi de l'éditeur de texte utilisé:
https://www.robvanderwoude.com/ansi.php

Et j'ai en effet bien un résultat correct dans Notepad++ quand j'y saisis la séquence
ECHO touche ^ ALT+027 touche [ 34mtoto ALT+027 touche [ 0m

et que j'enregistre le résultat dans un fichier txt ou cmd.

Il ne s'agit donc non pas d'un problème de clavier mais, pour une raison qui c'est le cas de le dire m'échappe, d'un problème de codification des caractères ANSI entre Bloc-Notes/console Windows et Notepad++

0
brucine Messages postés 14307 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 24 avril 2024 1 813 > brucine Messages postés 14307 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 24 avril 2024
24 mars 2023 à 09:29

Il semble s'agir d'un bug: Notepad++ code en UTF 8 sans BOM par défaut.

Les versions récentes Windows 10 sont censées permettre de choisir (notamment) entre UTF8 avec ou sans BOM, UTF8 sans BOM est par défaut.

Il semblerait que Windows "lise" le texte et convertisse automatiquement en ANSI ou UTF16  s'il ne trouve pas dans le fichier de BOM à son goût.

0
hypothetix Messages postés 190 Date d'inscription dimanche 19 janvier 2020 Statut Membre Dernière intervention 18 avril 2024 51
24 mars 2023 à 09:26

Pour la console uniquement , as-tu noté l'ajout d'un [ par rapport au texte initial

(avant) echo ^[34mTaille initiale: ^[0m

(après) echo ^[[34mTaille initiale: ^[[0m

(les deux  ^[  obtenus par  ALT+027 ou CTRL+[)

0