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 ?
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 ?
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
@Fallenreaper, ça marche dans la ligne droite. cmd
Je suppose donc que ce n'est pas une mauvaise habitude à prendre :)
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.
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 !
Ceci est également vrai pour csh, tcsh et bien d'autres shells. Je n'ai jamais vu ;
avant sous Linux
@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.
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.