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.