But : convertir les caractères spéciaux au format reconnu par DOS (encodage CP850)
Note : si vous cherchez comment échapper les caractères spéciaux, consultez cette page.
Si vous écrivez un script batch (.bat) par exemple sous Notepad, vous vous rendrez vite compte que les caractères spéciaux ne sont pas reconnus sous DOS. Ou plutôt ils sont acceptés en tant qu'autre caractère, ce qui peut-être plutôt génant.
Certains me diront : "pffff DOS, on s'en sert plus, et puis sous Windows XP y'a même plus de DOS, il est émulé !". Oui mais il peut être très utile de créer des scripts (démarrage par exemple, autorun...), je pene notamment aux administrateurs réseaux qui ont la "chance" de travailler sur un système d'exploitation Microsoft.
Il existe deux techniques pour se faire comprendre par DOS. La première consiste a utiliser l'éditeur DOS (qui fonctionne lui même à partir de DOS). Il n'est par contre pas très pratique, ni esthétique ! Pour le tester : Menu démarrer > exécuter > "edit" puis OK
Vous tombez donc sur l'éditeur (Edit.com) avec son bel écran bleu, ahh quelle nostalgie hein (la touche alt+flèches du clavier permet d'accéder au menu) :
Démonstration de l'éditeur DOS : Edit.com
Vous en conviendrez, la souris est quand même plus pratique pour éditer un script, bien que Edit.com fonctionne très bien 🙂
Deuxième méthode : avec Wordpad : Ménu Démarrer > exécuter > Wordpad puis OK (vous le trouverez également dans les Accessoires Windows). Entrez votre script, voici un exemple :
rem désactivation de l'affichage des commandes @echo off rem nettoyage de l'écran cls rem saut de ligne echo. rem affichage du titre echo Accents : à é è echo. pause
puis faites "Fichier > Enregistrer sous" et sélectionnez "Document texte MS-DOS" comme type :
Cliquez ensuite sur Enregistrer
Puis Wordpad vous indique que l'encodage va être modifié, cliquez sur oui :
Exécutons notre fichier batch :
Comme vous pouvez le voir les accents sont affichés correctement. Si cette manipulation n'avait pas été faite, DOS lirait de manière incorrecte les accents. Pour mieux comprendre, voici ce que cela donnerait :
Attention : certaines bordures d'encadrement sous DOS sont composées d'accent et seront également converties avec Wordpad, il faut donc les ajouter après cette converion en éditant votre script en texte pur, avec Notepad par exemple.
Si vous ne souhaitez pas vous embêter avec tout ça, un logiciel gratuit (pour une utilisation non commerciale) crée par la societé Astase, qui a également crée le génialissime logiciel de sauvegarde UltraBackup, permet d'écrire votre script sans vous préoccuper de la conversion. Tout se fait de manière transparente 🙂 Ce logiciel se nomme PowerBatch
Téléchargements directs PowerBatch (v.6.2 ~2.33 mo) :
Mirroir 1 - Mirroir 2
Tutoriel sur le Batch
Pour les programmeurs ASP voici un convertisseur de code source :
File scriptFile = new File(nomFichier);
scriptFile.createNewFile();
PrintWriter crayon = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(scriptFile),"CP850")));
String sScript = "Le contenu de mon scripts avec des accents é à ...";
crayon.write(sScript);
crayon.close();
Voilà de quoi déployer de beaux scripts de démarrage 🙂
Auteur : Mr Xhark
Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter
17 commentaires
Bonjour,
Je me lance pour un commentaire : Comment gérer les accents quand il s'agit d'une lecture dynamique, par exemple avec lecture d'une clé de registre pour le menu démarrer.
Dans un batch, j'utilise 2 lignes :
1: FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Common Start Menu"') DO SET CommonStartMenu=%%B
2: echo %CommonStartMenu%
Le problème est que l'accent apparait ainsi -> DÚmarrer
je ne peux donc pas utiliser cette variable, par exemple pour un changement de dossier
cd %CommonStartMenu% -> Le chemin d'accès spécifié est introuvable.
Alors ...
Nicolas
Utilise iconv.exe
blabla | %EXE_ICONV% -f UTF-8 -t CP850
merci pour power batch mais le lien est mort
@padoeil: le lien est bon, descend dans la page il y a un lien vers PowerBatch 😉
On peut aussi simplement utiliser
chcp 28591 > nul
au début du script. Ceci change la page de code de l'affichage à ISO-8859-1, qui est la page de code ANSI du fichier bat.
Ceci permet ensuite d'éditer le fichier bat dans n'importe quel éditeur texte, sans avoir à convertir les accents à chaque fois.
Si vous voulez utiliser des caractères spéciaux encore plus internationaux, le fichier bat peut être sauvegardé en UTF-8 (sans BOM) avec un éditeur texte plus spécialisé comme Notepad++ ou UltraEdit, et dans ce cas on utilise
chcp 65001 > nul
au début du script.
Excellent et merci niver.
luiso
MERCI NIVER
Bonsoir,
si je fait dans une invite de commande :
Un exemple :
dism argument >> B:\Check.log
Il m'affiche L'op‚ration a r‚ussi.
y a moyen de corriger ce problème ?
J'ai essayé avec chcp, aucun effet...
Merci
@Owned: et si tu édites le fichier avec edit, les accents sont corrects ?
@niver:
Excellent !!! Simple et pratique.
Merci beaucoup
Salut à tous,
Merci pour tous les conseils ci-dessus. Passionnant et efficace !
Question :
J'ai une liste de fichier obtenue par :
DIR *.JPG/B >LISTE.TXT
mais dans les images, il y a des noms avec accents ! Et je ne suis pas maître de cette liste.
Si j'utilise directement LISTE.TXT, je n'ai pas les accents.
Par contre, si je fais :
edit LISTE.TXT, j'ai bien les accents.
Comment sauver ce que j'ai à l'écran dans un fichier, avec les accents ?
Merci
Denis
@Denis: Salut Denis, ceci est lié à l'encodage, voici ta solution :
Explication : "chcp 65001" permet de définir l'encodage en UTF-8 sans BOM. Tu aurais aussi pu utiliser le mode ISO8859-1 avec "chcp 28591".
Retrouve la liste des encodages ici :
https://docs.microsoft.com/en-us/windows/win32/intl/code-page-identifiers
Pour connaître le mode :
Ici on voit le mode par défaut (con pour console). Marche aussi avec "chcp" tout seul.
En complément de mon article sur les accents en invite de commande
Et voilà 🙂
Bonjour,
Pour corriger ce pb, vous pouvez utilisez Notepad++ et enregistrer en .bat avec le menu :
Langage\M\MS-DOS style
Vous pourrez corriger les accents pour que MS-Dos les comprennent.
Bon batch !
@Ax: Merci, c'est super simple 👍
Bonjour,
il faudrait remplacer endodage par en c odage
"Puis Wordpad vous indique que l'endodage va être modifié, cliquez sur oui :"
donc
Puis Wordpad (write.exe) vous indique que l'encodage va être modifié, cliquez sur oui :
@hug95: corrigé merci !
@Niver
Merci beaucoup pour le "chcp 65001 > nul"
je suis en UTF-8 sous notepad++ et maintenant ça fontionne tres bien, mes accents s'affichent avec la commande echo
Merci encore