Passer au contenu principal

Extensions de redirection de fichiers Windows dans TCC

TCC prend en charge les opérateurs de redirection d'entrée/sortie dans CMD et les étend pour inclure de nouveaux Redirection Windows types et redirection UTF-8 et UTF-16.

La redirection peut être utilisée pour réaffecter les périphériques d'entrée standard (stdin), de sortie standard (stdout) et d'erreur standard (stderr) de leurs paramètres par défaut (le clavier et l'écran) à un autre périphérique tel que NUL ou un port série, vers un fichier. , ou dans le presse-papiers de Windows ou dans le TCC pseudo-périphériques CLIPn: et TMPn:. La redirection s'applique toujours à une commande spécifique et ne dure que pendant la durée de cette commande. Lorsque la commande est terminée, les affectations d'entrée standard, de sortie standard et d'erreur standard reviennent à leurs valeurs précédentes.

TCCLa sortie de est normalement en ANSI. Si vous souhaitez rediriger la sortie au format Unicode (UTF-8 ou UTF-16), vous pouvez utiliser l'option de démarrage /U dans TCC, ou l'option Sortie Unicode dans TCMD.INI, ou l'option >:8 or >:tu syntaxe de redirection.

Dans les descriptions ci-dessous, nom de fichier signifie soit le nom d'un fichier, soit celui d'un périphérique approprié (CON pour le clavier et l'écran ; CLIP : (ou CLIP0 : - CLIP9 :) pour le presse-papiers ; NUL pour le périphérique « nul », etc. ).

Voici les options de redirection d'entrée/sortie standard prises en charge par TCC (voir ci-dessous pour des options de redirection supplémentaires utilisant des descripteurs de fichiers numériques) :

Redirection d'entrée

Pour obtenir une entrée à partir d'un fichier ou d'un périphérique plutôt que du clavier :

    < nom de fichier

Redirection de sortie

Écraser STDOUT :

    > nom du fichier

Ajouter STDOUT :

    >> nom du fichier

écraser STDERR :

    >>&> nom du fichier

ajouter STDERR :

    >>&> nom du fichier

fusion écrasement de la sortie standard et de l'erreur standard :

    >&

fusion du nom de fichier, ajout de la sortie standard et de l'erreur standard :

    >>& nom du fichier

Pour utiliser la redirection, placez le symbole de redirection et le nom de fichier à la fin de la ligne de commande, après le nom de la commande et tous les paramètres. Par exemple, pour rediriger la sortie de la commande DIR vers un fichier appelé DIRLIST, vous pouvez utiliser une ligne de commande comme celle-ci :

    rép /b *.dat > liste de répertoires

Vous pouvez utiliser n’importe quelle combinaison de redirection d’entrée et de sortie pour la même commande, en fonction de votre objectif. Par exemple, cette commande envoie l'entrée au programme externe SORT à partir du fichier DIRLIST et envoie la sortie de SORT au fichier DIRLIST.SRT :

    trier liste de répertoires.srt

Vous pouvez rediriger le texte vers ou depuis le presse-papiers Windows à l'aide de l'icône TCC nom du pseudo-appareil CLIP : (les deux points sont obligatoires). La redirection vers le presse-papiers se fait toujours en utilisant UTF16 Unicode. Si vous redirigez la sortie d'une seule commande interne comme DIR, la redirection se termine automatiquement lorsque cette commande est terminée. Si vous démarrez un fichier batch avec redirection, toute la sortie du fichier batch est redirigée et la redirection se termine lorsque le fichier batch est terminé. De même, si vous utilisez la redirection après la parenthèse fermante d'un groupe de commandes (par exemple,  ...) > rapport), toute la sortie du groupe de commandes est redirigée et la redirection se termine lorsque le groupe de commandes est terminé.

Vous pouvez modifier le format de la sortie redirigée. Ces options remplaceront les directives UnicodeOutput et UTF8Output dans TCMD.INI. Remarque : ces options ne fonctionnent que pour rediriger la sortie de TCC commandes internes et fichiers batch.

    >:un     La sortie redirigée (STDOUT et/ou STDERR) est ANSI (caractères 8 bits)

    >:tu     La sortie redirigée est UTF16 Unicode

    >:8 ou >:u8     La sortie redirigée est UTF8

    >>:un     La sortie redirigée ajoutée (STDOUT et/ou STDERR) est ANSI (caractères 8 bits)

    >>:tu     La sortie redirigée ajoutée est UTF16 Unicode

    >>:8 ou >>:u8     La sortie redirigée ajoutée est UTF8

NonClobber

Lorsque la sortie est dirigée vers un fichier avec >, >& ou >&> et que ce fichier existe déjà, il sera écrasé. Vous pouvez protéger les fichiers existants à l'aide de la commande SETDOS /N1, du paramètre Protéger les fichiers de sortie redirigés sous l'onglet Démarrage des boîtes de dialogue de configuration ou de l'option Protéger les fichiers de sortie redirigés.

Lorsque la sortie est ajoutée à un fichier avec >>, >>& ou >>&>, le fichier sera créé s'il n'existe pas déjà. Cependant, si le mode NoClobber est défini comme décrit ci-dessus, la redirection d'ajout ne créera pas de nouveau fichier ; au lieu de cela, si le fichier de sortie n'existe pas, un « Fichier introuvable » ou une erreur similaire s'affichera.

Vous pouvez temporairement remplacer le paramètre actuel de NoClobber en utilisant un point d'exclamation [!] après le symbole de redirection. Par exemple, pour rediriger la sortie de DIR vers le fichier DIROUT et permettre l'écrasement de tout fichier existant malgré le paramètre NoClobber :

    répertoire >! déroute

Redirections multiples

La redirection est entièrement emboîtable. Par exemple, vous pouvez appeler un fichier de commandes et rediriger toute sa sortie vers un fichier ou un périphérique. La redirection de sortie sur une commande dans le fichier batch ne prendra effet que pour cette commande ; lorsque la commande est terminée, la sortie reviendra au fichier de sortie redirigé ou au périphérique utilisé pour le fichier de commandes dans son ensemble.

Création d'un fichier vide

Vous pouvez utiliser la redirection pour créer un fichier vide (zéro octet). Pour ce faire, saisissez  >filename comme commande, sans aucune commande réelle avant le caractère >. Si vous avez activé Protéger le fichier de sortie redirigé, utilisez >!filename.

Redirection par handle

En plus des options de redirection ci-dessus, TCC prend également en charge la syntaxe CMD :

    n>fichier     Rediriger le handle n vers le fichier nommé

    n>&m    Rediriger le handle n vers le même endroit que le handle m

Attention : vous ne pouvez pas mettre d'espaces entre le n et le >, ou entre les >, & et m dans la deuxième forme. Les valeurs de n et m doivent être des chiffres décimaux simples et représenter des descripteurs de fichiers. Windows définit 0, 1 et 2 comme.

    0 - entrée standard

    1 - sortie standard

    2 - erreur standard

La syntaxe n>file redirige la sortie du handle n vers le fichier. Vous pouvez utiliser ce formulaire pour rediriger deux handles vers des endroits différents. Par exemple:

    rép > fichier de sortie 2 > fichier d'erreur

envoie la sortie normale à un fichier appelé OUTFILE et tous les messages d'erreur à un fichier appelé ERRFILE.

La syntaxe n>&m redirige le handle n vers la même destination que le handle m précédemment attribué. Par exemple, pour envoyer l'erreur standard au même fichier comme sortie standard, vous pouvez utiliser cette commande :

    rép > fichier de sortie 2>&1

Notez que vous pouvez effectuer les mêmes opérations en utilisant les fonctionnalités de redirection standard. Les deux exemples ci-dessus pourraient s’écrire :

    rép > fichier de sortie >&> fichier d'erreur

et

    répertoire >& fichier de sortie

Redirection « ici-document »

Partout où la redirection d’entrée est prise en charge, vous pouvez utiliser une approche « ici-document » de type Linux. La syntaxe est :

    programme << mot

Le fichier batch actuel est lu jusqu'à l'occurrence suivante du mot et le texte résultant devient une entrée standard dans le programme. Par exemple:

c:\test\program.exe << endinput
entrée 1
entrée 2
entrée 3
entrée de fin
echo C'est la ligne suivante après "program.exe"

Particularités de « ici document » :

Si le << est suivi d'un trait d'union (-), l'espace blanc de début des lignes suivantes sera supprimé avant de les transmettre au programme (c'est-à-dire qu'ils seront effectivement justifiés à gauche).

L'analyseur effectuera une expansion des variables sur chaque ligne, à moins que le mot suivant << ne soit placé entre guillemets doubles.

Redirection "ici-chaîne"

La « chaîne ici » vous permet d'envoyer du texte de chaîne directement à l'entrée d'un programme. La syntaxe est :

programme <<< chaîne

Ceci est similaire à l'utilisation de KEYSTACK, mais plus facile à saisir pour la saisie de texte. (Si vous devez envoyer des clés spéciales ou insérer des attentes, vous devrez utiliser KEYSTACK.) Par exemple, pour envoyer une chaîne à l'entrée standard du programme :

c:\test\program.exe <<< Ceci est un texte d'entrée.

Extensions de tuyaux Windows dans TCC

Le piping est une forme spéciale de redirection, utilisant une instance supplémentaire de TCC pour chaque instance de la tuyauterie spécifiée dans la ligne de commande. TCC prend en charge les opérateurs de canalisations dans CMD et les étend pour inclure de nouveaux opérateurs de canalisations et la tuyauterie UTF-8 et UTF-16.

Vous pouvez créer un canal pour envoyer la sortie standard d'une commande (commande1) à l'entrée standard d'une autre commande (commande2), et éventuellement également envoyer l'erreur standard :

ce qui est envoyé au tuyau
format de commande
sortie standard uniquement
command1 | command2
fusionner la sortie standard et l'erreur standard
command1 |& command2
erreur standard uniquement
commande1 |&| commande2

Par exemple, pour prendre le résultat de la commande ALIAS (qui affiche une liste de vos alias et leurs valeurs) et le diriger vers l'utilitaire SORT externe pour générer une liste triée, vous utiliserez la commande :

pseudonyme | trier

Pour faire la même chose, puis diriger la liste triée vers la commande interne VIEW pour la visualiser :

pseudonyme | trier | vue /s

Les commandes TEE et Y sont des "raccords de tuyauterie" qui ajoutent plus de flexibilité à Tuyaux de fenêtres.

TCCLa sortie de est normalement en ANSI. Si vous souhaitez rediriger la sortie en Unicode, vous devez soit utiliser l'option de démarrage /U dans TCC, ou l'option Sortie Unicode dans TCMD.INI.

Comme pour la redirection, les tuyaux sont entièrement emboîtables. Par exemple, vous pouvez appeler un fichier batch et envoyer toute sa sortie à une autre commande avec un tube. Un canal sur une commande dans le fichier batch ne prendra effet que pour cette commande ; lorsque la commande est terminée, la sortie reviendra au canal utilisé pour le fichier batch dans son ensemble. Vous pouvez également avoir 2 tuyaux ou plus fonctionnant simultanément si, par exemple, les tuyaux s'exécutent dans différentes fenêtres ou processus.

Traitement de chaque ligne reçue d'un pipeline

Pour traiter chaque ligne de texte envoyée par le côté gauche d'un tube dans TCC, vous pouvez utiliser cette syntaxe :

rép | pour %file dans (@CON:) commande %file

Cet exemple montre comment transmettre chaque ligne de données redirigées vers une commande.

AVERTISSEMENTS: TCC implémente les tuyaux en démarrant un nouveau processus pour le programme de réception. Ce processus passe par la procédure standard de démarrage du shell, y compris l'exécution du fichier TCSTART, pour CHAQUE programme récepteur. Tous les programmes d'envoi et de réception s'exécutent simultanément ; le programme d'envoi écrit dans le tube et le programme de réception lit dans le tube. Lorsque le programme de réception trouve un signal de fin de fichier, il termine la lecture et le traitement des données transmises, puis se termine. Lorsque vous utilisez des tuyaux avec TCC, assurez-vous de considérer les conséquences possibles de l'utilisation d'un processus distinct pour exécuter le programme de réception, en particulier le fait qu'il ne peut pas créer/modifier/supprimer les variables d'environnement du programme d'envoi, et l'inclusion d'une commande pour changer de répertoire dans le fichier TCSTART peut provoquer le nouveau processus à exécuter dans un répertoire différent. Lorsque vous utilisez plusieurs canaux dans une seule commande, par ex. le deuxième exemple ci-dessus avec LIST, chaque tube ajoute une autre instance de TCC. Si vous devez exécuter le pipe dans le même contexte, utilisez des pipes in-process (voir ci-dessous).

Affichage de l'activité des canalisations

La TCC VUE TUYAU La commande lira à partir de STDIN et affichera l'activité du tuyau en temps réel dans un VOIR fenêtre tout en le transmettant également à STDOUT pour qu'il soit lu par l'application suivante.

Commandes supplémentaires liées aux tuyaux

TCC dispose de plusieurs commandes supplémentaires de « raccord de tuyauterie » :

  • TEE est normalement utilisé pour "diviser" la sortie d'un programme afin que vous puissiez la voir à l'écran et également la sauvegarder dans un fichier. Il peut également être utilisé pour capturer une sortie intermédiaire avant que les données ne soient modifiées par un autre programme ou une autre commande.

  • Y copie l'entrée standard vers la sortie standard. Une fois l'entrée terminée, les fichiers nommés sont ajoutés à la sortie standard. 

  • PEE est similaire à TEE, mais au lieu de rediriger STDOUT vers plusieurs fichiers, il le redirige vers plusieurs commandes secondaires via des tuyaux. Vous devez mettre chaque commande (et tous les arguments) entre guillemets.

Tuyaux en cours de processus

Les tuyaux en cours fonctionnent comme les tuyaux DOS à l'ancienne, en créant un fichier de sortie temporaire, en redirigeant STDOUT vers ce fichier, puis en redirigeant le fichier temporaire vers STDIN de la commande suivante. La syntaxe est :

commande1 |! commande2

C'est la même chose que de faire :

commande1 > temp.dat & commande2 < temp.dat

mais il est plus facile à taper et à lire.

L'avantage des canaux in-process est que command2 sera exécuté dans le même contexte que command1, vous pouvez donc faire des choses comme modifier les variables d'environnement sans les supprimer à la fin de command2. Il y a aussi quelques inconvénients à utiliser ce type de « pseudo-pipe » : il sera généralement plus lent qu'un vrai tube ; il utilisera de l'espace disque pour son fichier temporaire ; et command2 ne sera pas démarré tant que command1 ne sera pas terminé.

Tuyauterie de sortie ANSI, Unicode et UTF-8

Vous pouvez modifier le format de sortie envoyé à un canal. Ces options remplaceront les directives UnicodeOutput et UTF8Output dans TCMD.INI. Les options de sortie canalisée fonctionnent également avec les canaux en cours de processus (c'est-à-dire |!:u). Remarque : ces options ne fonctionnent que pour rediriger la sortie de TCC commandes internes et fichiers batch.

|:a La sortie canalisée est ANSI
|:u La sortie redirigée est UTF16 Unicode
|:8 ou |:u8 La sortie canalisée est UTF8