Toutes les autres réponses sont correctes : utilisez call.
Histoire
Dans les anciennes versions de Dos, il n'était pas possible d'exécuter récursivement des fichiers batch. C'est alors qu'a été introduite la commande call qui appelait un autre interpréteur de commandes pour exécuter le fichier batch et renvoyait l'exécution à l'interpréteur de commandes appelant lorsque celle-ci était terminée.
Évidemment, dans les versions ultérieures, aucun autre shell cmd n'était plus nécessaire.
Au début, de nombreux fichiers batch dépendaient du fait que l'appel d'un fichier batch ne retournait pas au fichier batch appelant. Changer ce comportement sans syntaxe supplémentaire aurait cassé de nombreux systèmes comme les systèmes de menus batch (utilisant des fichiers batch pour les structures de menus).
Comme dans de nombreux cas avec Microsoft, la rétrocompatibilité est donc la raison de ce comportement.
Conseils
Si vos fichiers batch comportent des espaces dans leur nom, utilisez des guillemets autour du nom :
call "unit tests.bat"
A propos : si vous n'avez pas tous les noms des fichiers batch, vous pouvez aussi utiliser for pour faire ceci : (dfoes ne garantit pas l'ordre correct des appels de fichiers batch, suit l'ordre du système de fichiers)
FOR %x IN (*.bat) DO call "%x"
Vous pouvez également réagir sur les niveaux d'erreur après un appel. Utilisez
exit /B 1 # or any other integer value in 0..255
pour renvoyer un niveau d'erreur. 0 dénote une exécution correcte. Dans le fichier batch appelant, vous pouvez réagir en utilisant
if errorlevel neq 0 <batch command>
Utilisez si errorlevel 1 si vous avez un Windows plus ancien que NT4/2000/XP pour attraper tous les niveaux d'erreur 1 et plus.
Pour contrôler le flux d'un fichier batch, il y a goto :-(
if errorlevel 2 goto label2
if errorlevel 1 goto label1
...
:label1
...
:label2
...
Comme d'autres l'ont souligné, examinez les systèmes de construction pour remplacer les fichiers batch.
4 votes
@sean - Vous n'avez pas besoin d'installer le paquetage Cygwin complet pour que les utilitaires de ligne de commande fonctionnent. Retirez simplement toutes les dlls Cygwin du paquetage, placez-les dans un répertoire patché, mettez tous vos outils dans un autre répertoire patché et vous êtes prêt à fonctionner.
0 votes
En supposant que chacun de ces fichiers ne sont que des lots, pourquoi ne pas les mettre dans un seul grand fichier et utiliser la fonction de délai d'attente pour permettre à chaque fois de démarrer.