ANSI.BAT
Redirection de commandes vers Bloc-Notes et impression d'un dossier
OEM : Original Equipment Manufacturer
ANSI: American National Standards
Institute
Rappel : Chaque fois qu'on évoque le problème de l'impression du contenu d'un dossier, on se lance dans l'élaboration d'un batch. Il faut quand même rappeler qu'il est très simple de copier ce qui s'affiche dans la Console pour le coller dans Bloc-Notes : Copier et coller avec la Console CMD. Les accents sont conservés, et la méthode permet de copier les résultats de bien des commandes. Ne reste que le problème des caractères Unicode évoqué et résolu par Michel Claveau ci-dessous :
Info :
Windows PowerShell
La nouvelle Console de Commandes de Microsoft permet les redirections sans
plus poser de problèmes de codes de caractères.
RÉSUMÉ
Création d'une nouvelle commande très simple permettant d'afficher et
d'imprimer
les redirections des commandes via Bloc-Notes.
Intégration au shell de l'impression du contenu d'un dossier avec ansi.bat
En seconde partie, amélioration du batch avec OEM2ANSI.vbs
PRÉAMBULE
Pour des raisons historiques, les fenêtres en lignes de commandes ou Consoles
(cmd.exe)
ont
la
particularité
d'avoir un affichage en caractères dits OEM.
Ceci a pour effet un défaut d'affichage des
caractères
accentués lorsqu'on affiche avec le Bloc-Notes (Notepad.exe), ou Wordpad (Wordpad.exe),
le résultat d'une redirection d'une commande vers un fichier texte. La redirection
d'une commande s'obtient par le redirecteur > (Voir
annexe)
Exemples :
DIR /OGN>c:\dossier.txt
CMD /? >c:\cmd.txt
EDIT.COM
Le programme pour afficher un texte en caractères OEM est Edit.com
présent dans System32. Ce programme issu du monde DOS n'est pas très agréable
à utiliser. Il reste utile pour créer rapidement du texte destiné à être affiché
dans une Console, comme
boot.ini, ou encore
la Section [SetValue] de \plugin\!custom\custom.inf qui affiche un
message au démarrage d'un BARTPE. Pour
UBCD4WIN cette section Setvalue
est dans \plugin\!Critical\UserSettings\User-Settings.inf
CONVERSION ANSI
Les programmes de Windows utilisent le code ANSI. On trouve
de très nombreux programmes de conversion OEM-ANSI, et les éditeurs de texte
proposent en général ces facilités. Si on sélectionne à la souris le contenu
d'une fenêtre de commandes, puis qu'on la copie en appuyant sur la touche Entrée
(ou via le menu obtenu par un clic droit sur l'icône de la fenêtre) pour enfin
coller ce contenu dans Bloc-Notes, l'affichage est correct, Bloc-Notes faisant
automatiquement la conversion. Même comportement avec Wordpad.
Mais le document
obtenu avec une redirection ne bénificiera pas de cette conversion automatique,
les caractères accentués seront mal affichés.
CHCP
La commande CHCP permet de modifier le code de caractères utilisé
par la fenêtre de commandes. L'aide sur cette commande est très réduite. On
en apprendra plus en consultant Aide et Support. Retenir que le code 850 est
celui utilisé par la console (OEM), et 1252 (non documenté) celui utilisé par
Windows (ANSI).
ANSI.BAT
Ce batch permettra de disposer d'une nouvelle commande nommée
ANSI. Celle-ci réalisera le changement de code, la redirection, et l'affichage
du résultat dans Bloc-Notes. Il sera alors possible de l'éditer,
le sauvegarder,
l'imprimer, ou le copier vers d'autres logiciels.
Voici le contenu de Ansi.bat :
CHCP 1252 |
Les paramètres remplaçables %1 à %9 permettent de passer au batch la commande et ses paramètres. La variable %1 contient la commande elle-même, les paramètres sont passés par les variables %2 à %9. On sera donc limité, compte-tenu de la simplicité de ce batch, à 8 paramètres. Ce qui est suffisant dans la plupart des cas. Pour info la variable %0 existe, elle contient le premier mot, la commande elle-même, qui ici serait Ansi. La commande Start démarre Bloc-Notes et redonne le contrôle au batch sans attendre. Ceci permet de laisser se refermer la Console d'exécution du batch. Le fichier temporaire ansi.txt est utilisé. Il n'est pas effacé et se trouve dans le dossier temporaire défini par la variable système %TEMP%. Il est écrasé à chaque nouvelle utilisation. Une copie de ANSI.BAT sera installée dans le dossier de Windows, la commande ANSI sera dès lors disponible.
APPLICATIONS
ANSI sera utile surtout pour récupérer l'aide sur les commandes;
voici quelques exemples :
ANSI cmd /?
ANSI dir /?
ANSI chcp /?
IMPRESSION DU CONTENU D'UN DOSSIER
On trouve de nombreux utilitaires
permettant d'imprimer le contenu d'un répertoire. ANSI réalise l'opération très
simplement :
ANSI dir
ANSI dir /ogn
ANSI dir /ogn c:\jeux
Les paramètres OG et N de la commande DIR sont utilisés pour améliorer
la présentation. Voir l'aide de la commande DIR :
/N Nouveau
format longue liste où les noms de fichiers sont à droite.
/O Affiche
les fichiers selon un tri spécifié : G = Répertoires en tête;
N = Tri par Noms (alphabétique)
Pour ajouter une commande ImprDirectory dans le menu contextuel des dossiers et volumes, fusionner au Registre le fichier ImprDirectory.reg dont voici le contenu:
Windows Registry Editor Version 5.00
;DIRECTORY
[HKEY_CLASSES_ROOT\Directory\shell\ImprDirectory]
[HKEY_CLASSES_ROOT\Directory\shell\ImprDirectory\Command]
@="cmd.exe
/c \"cd %L&&ANSI DIR /OGN""
;DRIVE
[HKEY_CLASSES_ROOT\Drive\shell\ImprDirectory]
[HKEY_CLASSES_ROOT\Drive\shell\ImprDirectory\Command]
@="cmd.exe
/c \"cd %L&&ANSI DIR /OGN""
SECONDE PARTIE : AMÉLIORATION DE ANSI.BAT
Historiquement Ansi.bat a été créé dans le but d'imprimer des répertoires. C'est incidemment qu'il s'est révélé un outil pratique pour obtenir une sortie ANSI de l'aide des commandes. Toutefois certains exécutables posent problème, et l'extrême simplicité de ce batch ne permet plus d'obtenir le résultat escompté. Il s'agit de commandes externes, telles que ARP.exe, ATTRIB.exe, CHKDSK.exe, COMMAND.exe, FTP.exe, PING.exe, nslookup.exe, et d'autres encore. Certains de ces exécutables vont donner un résultat correct, d'autres, comme ceux qui viennent d'être cités, provoquent des difficultés diverses. Ils ignorent les effets de la commande CHCP 1252.
Pour résoudre ce problème il faut scinder les opérations en deux temps, à savoir la création d'un fichier de sortie OEM, suivi d'une conversion ANSI. Ces sorties OEM pouvant comporter des caractères irréguliers, l'utilisation de CHCP s'est révélé insuffisant. Heureusement existe OEM2ANSI.VBS mis au point par Jean-Claude Bellamy.
Télécharger OEM2ANSI.VBS et placer une copie dans le dossier Windows.
ANSI.BAT est modifié comme suit pour utiliser OEM2ANSI.VBS au lieu de CHCP:
%1
%2 %3 %4 %5 %6 %7 %8 %9 >%temp%\oem.tmp |
Les exécutables cités plus haut affichent à présent le résultat voulu.
Quelques cas sont particuliers, ce sont les commandes possédant un mode de fonctionnement en sous-commandes. On utilise le caractère de redirection "Barre verticale" (pipe) pour leur envoyer la sous-commande dont on veut récupérer la sortie, en général l'aide. En général la sous-commande pour l'aide est help. Exemples :
echo help | ansi ftp
echo help | ansi nslookup
ARP.exe a un canal de sortie par défaut particulier. On parle aussi de Flux
d'Entrée/Sortie, ou de Handles.
Le tableau suivant indique les handles disponibles, il est extrait de Aide et
Support pour les caractères de
redirection :
Handle | Équivalent numérique du handle | Description |
---|---|---|
STDIN | 0 | Entrée clavier |
STDOUT | 1 | Sortie vers la fenêtre d'invite de commandes |
STDERR | 2 | Sortie des erreurs sur la fenêtre d'invite de commandes |
UNDEFINED | 3-9 | Ces handles sont définis individuellement par l'application et sont particuliers à chaque outil. |
ARP utilise le flux de sortie 2, au lieu de 1 habituellement. Pour rediriger
la sortie de ARP, il faut intercepter ce flux en écrivant :
arp 2>arp.oem
Application :
Il faut procéder en deux temps:
arp 2>arp.oem
ansi type arp.oem
Devant ces complications, on aura plus de confort pour ces cas à utiliser les
possibilités de copier-coller dans une Console (sélectionner avec la souris,
puis appuyer sur Entrée pour copier). Je rappelle que le collage dans le
Bloc-Notes réalise la conversion ANSI.
Si on préfère, on utilisera un éditeur de texte possédant ces possibilités de
conversion, voir annexe.
ANSIFICH.BAT
Ansifich.bat réalise la correction oem2ansi d'un fichier et affiche le résultat
dans Bloc-Notes:
cscript %windir%\system32\oem2ansi.vbs %1 %temp%\ansi.txt |
Syntaxe:
ansifich fichieroem
ANNEXE
Redirection des
commandes:
Taper redirection commandes dans Aide et Support,
ou via Démarrer>Exécuter>
cmd /c "cd %windir%\help&&hh ntcmds.chm::/redirection.htm"
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/redirection.mspx
http://fr.wikipedia.org/wiki/Redirection_(UNIX)#Les_redirections_d'entrées/sorties
Les paramètres remplaçables
http://www.microsoft.com/windows2000/fr/professional/help/percent.htm
cmd /c cd %windir%\help&&start hh ntcmds.chm::/percent.htm
Pourquoi OEM et ANSI ?
http://support.microsoft.com/kb/83461/en
Pages de codes
MSDN
: Vue d'ensemble des concepts
Pages de codes OEM
"Pages de codes OEM" fait référence aux pages de codes
MS-DOS. Ces codes avaient une correspondance directe avec le matériel pour
des raisons de rapidité. Il ne s'agissait à l'époque que de console limitées à
l'affichage de texte.
Les 128 premiers caractères des pages de codes OEM sont définies
par la norme ASCII. Les caractères étendus des pages de codes
OEM sont généralement des caractères graphiques spéciaux
utilisés pour le traçage de traits et les graphismes.
Pages de
codes ANSI
Les interfaces graphiques ont tout changé, plus besoin des caractères OEM.
Une page de codes ANSI est un terme générique pour décrire un ensemble de pages de codes utilisées
pour le codage des caractères dans les applications Win32 graphiques
et les polices. La page de codes ANSI Windows d'origine était destinée à une utilisation
aux États-Unis et en Europe occidentale. Cette page de codes a de nombreux
noms, dont page de codes 1252, Latin 1 et Windows ANSI. Elle est similaire à une
page de codes standard ISO appelée ISO 8859-1.
OEM2ANSI.VBS
http://www.bellamyjc.org/fr/divers.html#oemansi
Éditeurs de texte avec conversions OEM<->ANSI Par exemple : Metapad !
Utilitaires d'impression de répertoires
- Directory Printer
www.karenware.com/powertools/ptdirprn.asp
- PRINTDIR
www.bellamyjc.org/fr/vbsdownload.html#printdir
- PtDIRprn
http://jceel.free.fr
Mode d'édition rapide dans une Console
Taper "mode d'édition rapide" dans Aide et Support, ou via
Démarrer>Exécuter>
hh %windir%\help\win_dos.chm::/windows_dos_quickedit.htm
Une fois activé définitivement, ce mode est très pratique.
Merci d'avoir lu jusqu'ici !
Retour au début
Les restes du site
JF
(Jean-François)
Publié le 10/12/2005