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 :

Nouveau : une très intéressante approche du problème de l'impression du contenu d'un dossier par Michel CLAVEAU

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
%1 %2 %3 %4 %5 %6 %7 %8 %9 >%temp%\ansi.txt
CHCP 850
START notepad %temp%\ansi.txt

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
cscript %windir%\oem2ansi.vbs %temp%\oem.tmp %temp%\ansi.txt
del %temp%\oem.tmp
START notepad %temp%\ansi.txt

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
START notepad %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)
 

compteur Free
Publié le 10/12/2005