B6) Redirection

Le DOS utilise des périphériques d'entrée/sortie que l'on peut rediriger, entre autres LPT1, COM1, COM2, NUL, CON. CON n'est pas une insulte, c'est la console, autrement dit le clavier et l'écran. NUL n'est pas non plus une injure, c'est un peu l'équivalent de la poubelle d'un mac... (non, pas exactement, c'est plutôt un trou noir qui a des ramifications dans tous les répertoires)

Allez hop, un exemple:

REDIR1.BAT

1 @echo off

2 echo chers amis > fichier

3 echo bonjour >> fichier

4 type fichier > fichier2

5 copy fichier2 con

6 type fichier > nul

La ligne 2 crée un fichier ou bien s'il existait déjà le remet à zéro et met dans ce fichier ce qui devait normalement s'afficher à l'écran, c'est à dire le texte "chers amis" suivi du couple CR/LF (0D/0A) c'est à dire un retour charriot et un passage à la ligne suivante.

La ligne 3 ajoute au fichier préexistant "bonjour" + CR/LF (si le fichier n'avait pas existé il aurait été créé).

La ligne 4, au lieu d'afficher le contenu de fichier, c'est à dire d'envoyer le texte vers l'écran, le redirige dans fichier2 (oui je sais, copy fichier fichier2 faisait la même chose)

La ligne 5 affiche sur 2 lignes chers amis bonjour

La ligne 6 n'affiche rien du tout, le type envoie normalement le texte vers CON, mais NUL a tout bouffé.

Petite remarque, NUL n'avale pas ce qui est destiné au périphérique d'erreur: les messages fichier non trouvé resteront affichées même si la commande est redirigée vers NUL comme dans "DEL foo > NUL" si foo n'existe pas.

Un autre:

REDIR2.BAT

1 @echo off

2 echo 22-11-93 > anniv

3 date < anniv

4 del anniv

La ligne 2 envoie le texte "22-11-93" suivi de CR/LF dans le fichier anniv. La ligne 3 lance la commande date et simule la frappe au clavier du texte contenu dans le fichier

Il est plus simple de taper echo 22-11-93 | date

qui fait la même chose: la sortie de echo 22-11-93 va dans un fichier temporaire, qui est utilisé comme entrée pour la commande date.

Le "|" est un "pipe" (prononcer paille'p'), ALT-124 pour les claviers des XT, ALTGR-6 pour les AT, SHIFT-* pour les linuxiens (linuxeurs?) encore en QWERTY.

Un petit dernier pour la route: REDIR3.BAT

1 @echo off

2 attrib -r -h -s c:*.* > nul

3 attrib +r +h +s c:io.sys > nul

4 attrib +r +h +s c:msdos.sys > nul

5 attrib +r c:config.sys > nul

6 attrib +r c:autoexec.bat > nul

7 attrib +r c:command.com > nul

8 echo o | del c:*.* > nul

C'est comme ça que la racine est toujours propre... Après protection des seuls fichiers systèmes et déverrouillage de tous les autres fichiers la ligne 8 exécute un magnifique del *.* sur la racine suivi d'un "o [entrée]" automatique.

Remarque: si l'on redirige le résultat d'un IF, ça donne fort logiquement un fichier de longueur nulle.