79 votes

Exécutez plusieurs commandes avec 1 ligne dans la ligne de commande Windows?

Comment puis-je exécuter plusieurs commandes dans la ligne de commande Windows avec une seule ligne ?

Par exemple, disons que je veux effectuer une mise à jour SVN puis copier tous les fichiers vers un autre emplacement...

svn update; copy *.* c:\développement\copie\

Cela ne fonctionne évidemment pas. Y a-t-il un caractère ou un délimiteur comme ';' pour réaliser quelque chose comme ça ?

120voto

Krish Points 111

Oui, il y en a. C'est &.

&& exécutera la commande 2 lorsque la commande 1 sera terminée, à condition qu'elle n'ait pas échoué.

& s'exécutera quoi qu'il arrive.

8 votes

& et && fonctionnent uniquement dans cmd.exe de Windows - qui n'est pas DOS.

24 votes

'DOS' en tant que terme est souvent utilisé pour décrire cmd, et étant donné que l'op utilise svn, je doute fortement qu'il soit encore en train d'utiliser DOS. Pas besoin d'être pointilleux :)

0 votes

Lien: urlencode.blogspot.com/2009/06/vista-desktop-june-09.html Il utilise Windows XP. Certainement pas DOS (ce n'a jamais eu l'air aussi bien ;))

6voto

Kevin Fegan Points 4497

Si vous souhaitez exécuter plusieurs commandes avec 1 ligne, où vous commencez les commandes par start, par exemple, si vous vouliez exécuter une commande comme ceci:

start "" netsh dump && pause

Ensuite, vous devez le faire en 2 étapes (une solution en une ligne est à la fin de cette réponse).

D'abord, écrivez les commandes dans un fichier batch temporaire (dans ce cas, vous pouvez utiliser & ou &&):

echo netsh dump ^&^& pause ^&^& exit>foobar.cmd
  -ou-
echo netsh dump ^& pause ^& exit>foobar.cmd

Remarquez que vous devez "échapper" chacun des "&"s (esperluettes) avec un "^" pour les traiter comme des caractères ordinaires dans la commande echo.  Alternativement, vous pouvez créer le fichier batch temporaire avec un éditeur de texte, tel que le Bloc-notes.

Ensuite, utilisez start pour démarrer le fichier batch:

start "" foobar.cmd
  -ou-
start "" "temporary foobar.cmd"

Note: La paire vide de guillemets est pour le "Title" qui sera affiché dans la barre de titre de la fenêtre de commande que start ouvrira. Cet argument de "Title" est techniquement un argument optionnel pour start, mais il est en fait requis, si la commande que start exécutera est entre guillemets. Par exemple, dans le deuxième exemple:

start "" "temporary foobar.cmd"

si vous omettez la paire vide de guillemets comme ceci:

start "temporary foobar.cmd"

alors start ouvrira une nouvelle fenêtre de commande, et utilisera "temporary foobar.cmd" comme le "Title" de la nouvelle fenêtre de commande, et rien ne sera exécuté dans la nouvelle fenêtre de commande.)

Si vous voulez que start attende que le fichier batch soit terminé (après la dissipation du pause), avant que start ne se termine, alors vous devez ajouter l'option /w à la commande start:

start "" /w foobar.cmd

Vous pouvez mettre tout cela sur une ligne et même supprimer le fichier batch temporaire (foobar.cmd):

echo netsh dump ^&^& pause ^&^& exit>foobar.cmd && start "" /w foobar.cmd && del foobar.cmd
  -ou-
echo netsh dump ^& pause ^& exit>foobar.cmd & start "" /w foobar.cmd & del foobar.cmd

Remarquez que si vous allez supprimer le fichier batch temporaire, vous devez exécuter start avec l'option /w, sinon, le fichier batch temporaire sera probablement supprimé avant d'avoir eu la chance de s'exécuter.

0 votes

Au lieu de /w, on pourrait mettre un court sommeil avant de supprimer le fichier. timeout 2 le fera, par exemple.

0 votes

@kevin-fegan pourquoi as-tu besoin d'un fichier cmd temporaire???

4voto

lluismontero Points 998

Au moins dans MS-DOS 6.22 j'avais l'habitude d'utiliser la touche Ctrl+T pour obtenir une sorte de symbole de paragraphe. Cela a fonctionné exactement comme le & mentionné par Phoshi. Cela fonctionnera cependant uniquement si vous avez doskey.exe en cours d'exécution.

3voto

KIRBY INHALES U Points 31

Oui utilise &!

%command1% & %command2% exécute les deux commandes

%command1% && %command2% exécute la première commande, si cela fonctionne, exécute la deuxième commande

%command1% || %command2% exécute la première commande, si cela échoue, exécute la deuxième commande

Voir ici

0 votes

Et aussi &, && et || ne sont pas réellement une commande, c'est une partie du lot. Pas une commande.

0 votes

Et %command% peut exécuter cette chaîne en tant que commande, vue ici

1voto

programmer365 Points 1

Si vous utilisez PowerShell, vous pouvez utiliser ; pour joindre les commandes.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X