2008-10-13 13 views
127

J'essaye 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.Exécution de plusieurs commandes à partir d'un script Windows cmd

La commande qu'il arrête après est un build maven (pas sûr si c'est pertinent).

Comment puis-je le faire continuer et exécuter chaque tâche à son tour s'il vous plaît?

L'installation de n'importe quel logiciel ou la configuration du registre etc est complètement hors de question - il faut travailler sur une installation de Windows XP vanilla j'ai peur.

Idéalement, je voudrais que le script s'interrompe si l'une des commandes échouait, mais c'est un «bon choix», pas essentiel.

Merci.

Répondre

132

Lorsque vous appelez un autre fichier .bat, je pense que vous avez besoin « appeler » en face de l'appel:

call otherCommand.bat 
+1

Salut, dans le script d'origine, je n'appelais pas d'autres fichiers .cmd, mais je les ai depuis séparés en fichiers séparés afin que je puisse les exécuter à tour de rôle. Donc, mettre l'appel devant chaque commande semble avoir fait l'affaire, merci! –

+0

Cela a également fonctionné pour moi lors de l'appel de la commande git diff – Bronumski

+5

En fait, sous Windows, 'mvn' est un fichier .bat en lui-même, vous devez donc utiliser' call' comme dans 'call mvn install' ; Normalement, vous n'avez pas besoin de créer un fichier cmd supplémentaire. – jfpoilpret

1

Je ne connais pas la réponse à votre question, mais si vous faites beaucoup de ces scripts, il pourrait être utile d'apprendre un langage plus puissant comme perl. Des implémentations libres existent pour Windows (par exemple activestate, cygwin). J'ai trouvé que ça valait la peine de faire l'effort initial pour mes propres tâches.

Edit:

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

+0

Merci, mais je suis incapable d'installer un logiciel. Je voudrais avoir accès à quelque chose de plus puissant que le langage de script Windows merdique. :-( –

+6

Vous pouvez toujours utiliser vbscript ou javascript, ils sont intégrés à l'hôte de script Windows – Ferruccio

43

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

+0

Merci, je vais essayer avec la réponse acceptée ci-dessus: –

+0

Cela va-t-il arrêter l'exécution du second script? si le build de maven échoue –

+0

Ce lien est cassé: "Le serveur de backend n'a pas répondu dans le temps Le serveur d'application est trop occupé et ne peut pas traiter des demandes à temps." – mc10

25

Vous ne savez pas pourquoi la première commande est en cours d'arrêt. Si vous pouvez le rendre parallèle, vous pouvez essayer quelque chose comme

start cmd.exe /C 1.bat  
start cmd.exe /C 2.bat 
+6

Utilisez '/ K' au lieu de'/C' si vous voulez que le shell reste ouvert après l'exécution de votre commande. – JellicleCat

+0

Pas besoin d'utiliser 'cmd.exe' et' start', juste 'start x.bat1' fera l'affaire. – user66001

1

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

Entraînement:

cd "Script location" 
schtasks /run /tn "TASK1" 
schtasks /run /tn "TASK2" 
schtasks /run /tn "TASK3" 
exit 
19

Je viens faire la tâche exacte même (ish) de créer un script batch pour exécuter des scripts de test Maven. Le problème est que l'appel de scrips maven avec mvn clean install ... est lui-même un script et doit donc être fait 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 l'appel. Cela permettra l'utilisation de scripts Maven consécutifs dans le fichier batch.

0

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

2

en utilisant le double esperluette exécutera la deuxième commande, que si le premier réussit:

cd Desktop/project-directory && atom . 

Où que, en utilisant un seul esperluette tentera d'exécuter les deux commandes, même si le premier échoue:

cd Desktop/project-directory & atom .