Groupement de commandement

Le groupement de commandes permet de regrouper logiquement un ensemble de commandes en les plaçant entre parenthèses.

 

Le regroupement de commandes a deux utilisations principales. La première consiste à exécuter plusieurs commandes à un endroit où, normalement, une seule commande est autorisée. Par exemple, supposons que vous souhaitiez exécuter deux  commandes REN différentes  dans tous les sous-répertoires de votre disque dur. Vous pourriez le faire de cette manière :

 

global ren *.wx1 *.wxo

global ren *.tx1 *.txo

 

Mais avec le regroupement de commandes, vous pouvez faire la même chose en une seule commande :

 

global (ren *.wx1 *.wxo & ren *.tx1 *.txo)

 

Lesdeux  commandes REN entre parenthèses apparaissent à GLOBAL comme s'il s'agissait d'une seule commande, de sorte que les deux commandes sont exécutées pour chaque répertoire, mais les répertoires ne sont analysés qu'une seule fois, et non deux, ce qui permet de gagner du temps.

 

Ce type de regroupement de commandes est particulièrement utile avec les  commandes EXCEPT, FOR, GLOBAL et IF. Lorsque vous utilisez cette approche dans unfichier  batch , vous devez soit placer toutes les commandes du groupe sur une seule ligne, soit placer la parenthèse ouvrante à la fin d'une ligne et placer les commandes sur les lignes suivantes . Lesexemples 1 et 2 ci-dessous fonctionneront correctement, mais pas l'exemple 3 :

 

Exemple 1 (correct) :

 

for %f in (1 2 3) (echo hello %f & echo goodbye %f)

 

Exemple 2 (correct) :

 

for %f in (1 2 3) (

echo hello %f

echo goodbye %f

)

 

Exemple 3 (incorrect) :

 

for %f in (1 2 3) (echo hello %f

echo goodbye %f)

 

Si les exemples ci-dessus sont tapés sur laligne de commande , TCC émettra une  invite More ? en réponse à chaque ligne jusqu'à ce que le groupe de commandes soit fermé (c'est-à-dire que la parenthèse finale soit reconnue), comme nous le verrons plus loin .

 

Ladeuxième utilisation courante du regroupement de commandes consiste à rediriger l'entrée ou la sortie de plusieurs commandes sans utiliser à plusieurs reprises les  symboles de redirection. Par exemple, considérons le fragment de fichier batch suivant qui place quelques lignes d'en-tête (y compris la date du jour) et des affichages de répertoire dans un fichier de sortie en utilisant la redirection. La première  commande ECHO crée le fichier en utilisant >, et les autres commandes ajoutent des annexes au fichier en utilisant >> :

 

echo Data files %_date > filelist

dir *.dat >> filelist

echo. >> filelist

echo Text files %_date >> filelist

dir *.txt >> filelist

 

En utilisant le regroupement de commandes, ces commandes peuvent être écrites beaucoup plus simplement. Saisissez cet exemple sur une seule ligne :

 

(echo Data files %_date & dir *.dat & echo `` & echo Text files %_date & dir *.txt) > filelist

 

La redirection, qui apparaît en dehors des parenthèses, s'applique à toutes les commandes entre parenthèses. Comme la redirection n'est effectuée qu'une seule fois, les commandes s'exécutent un peu plus rapidement que si chaque commande était saisie séparément. Lamême approche peut être utilisée pour la redirection d'entrée  et le piping.

 

Vous pouvez également utiliser le regroupement de commandes dans un fichier batch ou à l'invite pour répartir les commandes sur plusieurs lignes. Ce dernier exemple est similaire à l'exemple de redirection ci-dessus, mais il est saisi à l'invite. Notez l' invite More ? après chaque ligne incomplète. Aucune des commandes n'est exécutée tant que le groupe de commandes n'est pas complété par la parenthèse fermante. Cet exemple ne doitpas nécessairement être saisi sur une seule ligne :

 

[c:\] (echo Data files %_date

More? dir *.dat

More? echo.

More? echo Text files %_date

More? dir *.txt) > filelist

[c:\]

 

Limites

 

Un groupe de commandes entre parenthèses est comme une longue ligne de commande. La longueur totale du groupe n'est limitée que par la mémoire vive dont vous disposez.

 

Vous ne pouvez pas utiliser les  labels TEXT / ENDTEXT, GOTO ou GOSUB dans un groupe de commandes.

 

Chaque ligne que vous tapez à l'invite normale ou à l' invite More ?, ainsi que chaque commande individuelle contenue dans la ligne, doit respecter la limite de longueur habituelle de la ligne de commande.