1319 votes

Comment exécuter deux commandes sur une seule ligne dans Windows CMD ?

Je veux exécuter deux commandes dans une console CMD de Windows.

Sous Linux, je ferais comme ceci

touch thisfile ; ls -lstrh

Comment cela se fait-il sous Windows ?

1865voto

djdanlib Points 3290

Comme cela sur tous les OS Microsoft depuis 2000, et encore bon aujourd'hui :

dir & echo foo

Si vous voulez que la seconde commande ne s'exécute que si la première s'est terminée avec succès :

dir && echo foo

La syntaxe de l'esperluette (&) pour exécuter plusieurs commandes sur une seule ligne remonte à Windows XP, Windows 2000 et certaines versions antérieures de NT. (4.0 au moins, selon un commentateur ici).

Il y a plusieurs autres points à ce sujet que vous trouverez en parcourant cette page.

Les données historiques suivent, pour ceux qui pourraient les trouver instructives.

Avant cela, la syntaxe && n'était qu'une fonctionnalité du remplacement de l'interpréteur de commandes 4DOS avant que cette fonctionnalité ne soit ajoutée à l'interpréteur de commandes Microsoft.

Dans Windows 95, 98 et ME, vous utilisez le caractère pipe à la place :

dir | echo foo

Dans MS-DOS 5.0 et plus, ainsi que dans certaines versions antérieures de Windows et NT de l'interpréteur de commandes, le séparateur de commandes (non documenté) était le caractère 20 (Ctrl+T) que je représenterai ici par ^T.

dir ^T echo foo

20 votes

Fonctionne également sur Win 8.0 et 8.1.

1 votes

@ZaLiTHkA Pouvons-nous, par défaut, toujours exécuter avec && alors ?

6 votes

@Fallenreaper, ça marche dans la ligne droite. cmd Je suppose donc que ce n'est pas une mauvaise habitude à prendre :)

697voto

Raihan Points 2760

Une citation de la documentation :

Utilisation de commandes multiples et de symboles de traitement conditionnel

Vous pouvez exécuter plusieurs commandes à partir d'une seule ligne de commande ou script en utilisant des symboles de traitement conditionnel. Lorsque vous exécutez plusieurs commandes avec des symboles de traitement conditionnel, les commandes situées à droite du symbole de traitement conditionnel agissent en fonction des résultats de la commande située à gauche du symbole de traitement conditionnel.

Par exemple, vous pouvez vouloir exécuter une commande uniquement si la commande précédente échoue. Ou bien, vous pouvez vouloir exécuter une commande uniquement si la commande précédente a réussi.

Vous pouvez utiliser les caractères spéciaux énumérés dans le tableau suivant pour transmettre plusieurs commandes.

  • & [...]
    command1 & command2
    Utilisez-le pour séparer plusieurs commandes sur une ligne de commande. Cmd.exe exécute la première commande, puis la seconde.

  • && [...]
    command1 && command2
    Permet d'exécuter la commande qui suit && uniquement si la commande qui précède le symbole réussit. Cmd.exe exécute la première commande, puis exécute la deuxième commande uniquement si la première commande a réussi.

  • || [...]
    command1 || command2
    Permet d'exécuter la commande qui suit || uniquement si la commande qui précède || échoue. Cmd.exe exécute la première commande, puis exécute la deuxième commande uniquement si la première commande n'a pas abouti (reçoit un code d'erreur supérieur à zéro).

  • ( ) [...]
    (command1 & command2)
    Permet de regrouper ou d'imbriquer plusieurs commandes.

  • ; or ,
    command1 parameter1;parameter2
    Utiliser pour séparer les paramètres de la commande.

55 votes

Essayez cmd /c "echo foo & echo bar" .

3 votes

vagrant up && vagrant ssh a fonctionné sans guillemets sous Windows 10.

0 votes

Merci. Je ne savais pas pour le singe & - le rend asynchrone et exécute les deux en parallèle. J'étais coincé parce que j'utilisais && avec est synchrone et ne continue que si la première réussit !

93voto

manojlds Points 96599

& est l'équivalent de Bash pour ; ( exécuter des commandes) et && est l'équivalent en Bash de && (n'exécuter les commandes que lorsque la précédente n'a pas provoqué d'erreur).

1 votes

Ceci est également vrai pour csh, tcsh et bien d'autres shells. Je n'ai jamais vu ; avant sous Linux

14 votes

@LuuVinhPhúc dans des coquillages de style sh, ; signifie exécuter la première commande, attendre qu'elle se termine, puis exécuter la deuxième commande. & signifie exécuter la première commande, la mettre en arrière-plan, et exécuter la deuxième commande. Ainsi, les deux programmes sont lancés simultanément. Notez que ce ne sont pas des symboles de combinaison, mais des symboles de suivi de la première commande ; vous pouvez lancer une seule commande en arrière-plan avec progname & sans avoir une seconde commande.

28voto

TroodoN-Mike Points 1713

Si vous voulez créer un raccourci cmd (par exemple sur votre bureau) ajoutez le paramètre /k (/k signifie garder, /c fermera la fenêtre) :

cmd /k echo hello && cd c:\ && cd Windows

26voto

scrappedcola Points 6199

Vous pouvez utiliser & pour exécuter les commandes les unes après les autres. Exemple : c:\dir & vim myFile.txt

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X