web-dev-qa-db-fra.com

Exécution de plusieurs commandes à partir d'un script cmd Windows

J'essaie d'écrire un script cmd Windows pour effectuer plusieurs tâches en série. Cependant, il s’arrête toujours après la première commande du script.

La commande qu'il arrête après est une construction maven (pas sûr que ce soit pertinent).

Comment puis-je continuer et exécuter chaque tâche à tour de rôle, s'il vous plaît?

L'installation de tout logiciel ou la configuration du registre, etc. est complètement hors de question - cela doit fonctionner sur une installation Windows XP de Vanilla, j'en ai bien peur.

Idéalement, j'aimerais que le script soit annulé en cas d'échec de l'une des commandes, mais il s'agit d'un "outil agréable", qui n'est pas essentiel.

Merci.

133
Darren Greaves

Lorsque vous appelez un autre fichier .bat, je pense que vous avez besoin d'un "appel" avant l'appel:

call otherCommand.bat
136
Lou Franco

Vous pouvez utiliser le symbole && entre les commandes pour exécuter la deuxième commande uniquement si la première réussit. Plus d'infos ici http://commandwindows.com/command1.htm

45
Steve

Vous ne savez pas pourquoi la première commande s'arrête. Si vous pouvez le faire en parallèle, vous pouvez essayer quelque chose comme

start cmd.exe /C 1.bat      
start cmd.exe /C 2.bat
25
Gulzar Nazim

Je viens de faire exactement la même chose (ish): créer un script batch pour exécuter des scripts de test maven. Le problème est qu'appeler des scripts maven avec mvn clean install ... est lui-même un script et doit donc être effectué avec call mvn clean install.

Code qui fonctionnera

rem run a maven clean install
cd C:\rbe-ui-test-suite 
call mvn clean install
rem now run through all the test scripts
call mvn clean install -Prun-integration-tests -Dpattern=tc-login
call mvn clean install -Prun-integration-tests -Dpattern=login-1

Notez plutôt l'utilisation de call. Cela permettra l'utilisation de scripts Maven consécutifs dans le fichier de commandes.

23
mhollander38

L'utilisation de doubles esperluettes lancera la deuxième commande, uniquement si la première réussit:

cd Desktop/project-directory && atom .

Où as, l'utilisation d'une seule esperluette tentera d'exécuter les deux commandes, même si la première échoue:

cd Desktop/project-directory & atom .
4
JSON C11

Si vous utilisez Windows, vous pouvez utiliser la commande suivante.

Conduire:

cd "Script location"
schtasks /run /tn "TASK1"
schtasks /run /tn "TASK2"
schtasks /run /tn "TASK3"
exit
1
Pulendar Vadde

Je ne connais pas la réponse directe à votre question, mais si vous écrivez beaucoup de scripts, cela vaudrait peut-être la peine d'apprendre un langage plus puissant comme Perl. Des implémentations libres existent pour Windows (par exemple, activestate, cygwin). J'ai trouvé que cela valait l'effort initial pour mes propres tâches.

Edit:

Comme suggéré par @Ferruccio, si vous ne pouvez pas installer de logiciel supplémentaire, pensez à vbscript et/ou javascript. Ils sont intégrés à l'hôte de script Windows.

1
Mr Fooz

Notez que vous n'avez pas besoin de points-virgules dans les fichiers de commandes. Et la raison pour laquelle vous devez utiliser call est que mvn est lui-même un fichier batch et que les fichiers batch doivent s’appeler avec un appel, sans quoi le contrôle ne revient pas à l’appelant.

0
Pushkar