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

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

sous Linux je le ferais comme ceci

touch thisfile ; ls -lstrh

Comment est-ce fait sur Windows?

674
demandé sur Soviut 2011-11-08 22:31:04

16 réponses

comme ceci sur tous les os de Microsoft depuis 2000, et encore bon aujourd'hui:

dir & echo foo

si vous voulez que la deuxième commande ne s'exécute que si la première est sortie avec succès:

dir && echo foo

la syntaxe simple ampersand (&) pour exécuter plusieurs commandes sur une même ligne remonte à Windows XP, Windows 2000, et à certaines versions antérieures de NT. (4.0 au moins, selon un intervenant ici.)

il y a pas mal d'autres points à ce sujet que vous trouverez en faisant défiler cette page.

les données historiques suivent, pour ceux qui peuvent le trouver éducatif.

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

dans Windows 95, 98 et moi, vous utiliseriez le caractère pipe à la place:

dir | echo foo

Dans MS-DOS 5.0 et versions ultérieures, à travers quelques-uns des premiers Versions 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 vais représenter avec ^T ici.

dir ^T echo foo
889
répondu djdanlib 2017-10-24 02:02:45

une citation de la documentation:

utilisant plusieurs commandes et les symboles de traitement conditionnel

vous pouvez exécuter plusieurs commandes à partir d'une seule ligne de commande ou d'un seul script en utilisant conditionnel symboles de traitement. 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 exécuter une commande uniquement si la commande échoue. Ou, vous pouvez exécuter une commande uniquement si la commande précédente est réussie.

, Vous pouvez utiliser le les caractères indiqués dans le tableau suivant pour passer plusieurs commandes.

  • & [...]

    command1 & command2

    Utilisez pour séparer plusieurs commandes sur une ligne de commande. Cmd.exe exécute la première commande, puis la deuxième commande.

  • && [...]

    command1 && command2

    Utilisez pour exécuter la commande suivre & & seulement si la commande précédant le symbole est réussie. Cmd.exe exécute la première commande, puis la seconde seulement si la première commande est terminée avec succès.

  • || [...]

    command1 || command2

    Utilisez pour exécuter la commande suivante || uniquement si la commande précédente || échoue. Cmd.exe exécute la première commande, puis exécute la deuxième commande que si la première commande n'a ne pas remplir avec succès (reçoit un code d'erreur supérieur à zéro).

  • ( ) [...]

    (command1 & command2)

    Utilisez pour grouper ou emboîter des commandes multiples.

  • ; or ,

    command1 parameter1;parameter2

    Utiliser pour séparer les paramètres de commande.

499
répondu Raihan 2017-11-21 11:38:45

& est le Bash équivalent de ; ( exécuter des commandes) et && est le Bash équivalent de && (exécuter des commandes que lorsque la précédente a pas provoqué une erreur).

63
répondu manojlds 2017-07-15 17:09:16

Vous pouvez utiliser et d'exécuter des commandes l'une après l'autre. Exemple: c:\dir & vim myFile.txt

23
répondu scrappedcola 2011-11-08 18:34:44

si vous voulez créer un raccourci cmd (par exemple sur votre bureau) Ajouter / K paramètre (/k signifie Garder, / c fermera la fenêtre):

cmd /k echo hello && cd c:\ && cd Windows
16
répondu TroodoN-Mike 2013-11-12 06:39:22

vous pouvez utiliser appeler pour résoudre le problème des variables d'environnement évaluées trop tôt-par exemple

set A=Hello & call echo %A%
11
répondu SSi 2016-03-13 11:14:06

cmd /c ipconfig /all & Output.txt

cette commande exécute la commande et ouvre le fichier Output.txt en une seule commande

5
répondu dpp.2325 2014-12-17 00:44:04

donc, j'essayais d'activer la tâche spécifique d'exécuter RegAsm (register assembly) à partir d'un menu contextuel. Le problème que j'avais, c'était que le résultat apparaîtrait et disparaîtrait avant que je puisse le lire. J'ai donc essayé la piping à Pause , qui ne fonctionne pas lorsque la commande échoue (comme mentionné ici Pause commande ne fonctionne pas .bat script et ici la commande de fichier discontinu PAUSE ne fonctionne pas ). Donc j'ai essayé cmd /k mais cela laisse la fenêtre s'ouvre pour plus de commandes (je veux juste lire le résultat). J'ai donc ajouté un pause suivi de exit à la chaîne, résultant en ce qui suit:

cmd /k C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe "%1" /codebase \"%1\" & pause & exit

cela fonctionne comme un charme -- RegAsm fonctionne sur le fichier et montre ses résultats, puis un "appuyez sur n'importe quelle touche pour continuer... l'invite " s'affiche, puis la fenêtre d'invite de commande se ferme lorsqu'une touche est enfoncée.

pour les autres qui pourraient être intéressés, vous pouvez utiliser ce qui suit .reg entrées du fichier pour ajouter un dllfile association .les fichiers dll, puis une extension de la commande RegAsm (notez les guillemets échappés et les antislashs):

[HKEY_CLASSES_ROOT\.dll]
"Content Type"="application/x-msdownload"
@="dllfile"

[HKEY_CLASSES_ROOT\dllfile]
@="Application Extension"

[HKEY_CLASSES_ROOT\dllfile\Shell\RegAsm]
@="Register Assembly"

[HKEY_CLASSES_ROOT\dllfile\Shell\RegAsm\command]
@="cmd /k C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe \"%1\" /codebase \"%1\" & pause & exit"

maintenant j'ai un menu clic droit pour enregistrer une assemblée.

5
répondu SNAFUBAR 2017-05-23 12:26:33

un certain nombre de symboles de traitement peuvent être utilisés lors de l'exécution de plusieurs commandes sur la même ligne, et peuvent conduire à une redirection de traitement dans certains cas, modifier la sortie dans d'autres cas, ou tout simplement échouer. Un cas important est de placer sur la même ligne des commandes qui manipulent des variables.

@echo off
setlocal enabledelayedexpansion
set count=0
set "count=1" & echo %count% !count!

0 1

comme vous le voyez dans l'exemple ci-dessus, lorsque des commandes utilisant des variables sont placées sur la même ligne, vous devez utiliser l'extension retardée pour mettre à jour votre les valeurs de la variable. Si votre variable est indexée, utilisez la commande CALL avec % % modificateurs pour mettre à jour sa valeur sur la même ligne:

set "i=5" & set "arg!i!=MyFile!i!" & call echo path!i!=%temp%\%%arg!i!%%

path5=C:\Users\UserName\AppData\Local\Temp\MyFile5
5
répondu sambul35 2017-09-23 05:36:21

pour exécuter deux commandes en même temps, vous devez mettre un symbole & (ampersand) entre les deux commandes. Comme ceci:

color 0a & start chrome.exe

santé!

3
répondu PryroTech 2016-12-13 04:41:56

j'essaie d'avoir deux pings dans la même fenêtre, et c'est une série de commande sur la même ligne. Après avoir terminé la première, exécutez la deuxième commande.

la solution était de combiner avec start /b sur un prompt de commande Windows 7.

Démarrer comme d'habitude, sans /b , et lancer dans une fenêtre séparée.

La commande utilisée pour lancer dans la même ligne est:

start /b command1 parameters & command2 parameters

de n'importe quelle façon, si vous voulez analysez la sortie, Je ne recommande pas de l'utiliser. J'ai remarqué que la sortie est brouillée entre la sortie des commandes.

3
répondu sdcxp 2017-07-15 17:13:56

Eh bien, vous avez deux options: la tuyauterie, ou tout simplement & :

DIR /S & START FILE.TXT

Ou,

tasklist | find "notepad.exe"

Piping ( | ) est plus pour prendre la sortie d'une commande, et la mettre dans une autre. Et ( & ) est juste dire exécuter ceci, et cela.

3
répondu PyDever 2017-07-15 17:14:58

Non, cd / && tree && echo %time% . Le temps de réponse est au moment où la première commande est exécutée.

La tuyauterie a un problème, mais il n'est pas indispensable tant que les gens savent comment il fonctionne.

1
répondu notarealname 2017-07-15 17:11:05

c'est simple: il suffit de les différencier avec && signes. Exemple:

echo Hello World && echo GoodBye World

Goodbye World sera imprimé après Hello World.

0
répondu Rajan Dhanowa 2017-06-05 15:06:44

un autre exemple: par exemple, lorsque nous utilisons le système de construction gulp au lieu de

gulp - par défaut > build

gulp build - bâtir-dossier

gulp watch - démarrer la-montre

gulp dist - construire dist-dossier

on peut faire ça avec une ligne:

cd c:\xampp\htdocs\project & gulp & gulp watch
0
répondu Mile Mijatovic 2017-07-15 17:16:00

Lorsque vous essayez d'utiliser ou de manipuler des variables dans une ligne méfiez-vous de leur contenu! Par exemple: une variable comme la suivante

PATH=C:\Program Files (x86)\somewhere;"C:\Company\Cool Tool";%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;

peut conduire à beaucoup de difficultés insurmontables si vous l'utilisez comme %PATH%

  1. Les parenthèses de fermeture de mettre fin à votre déclaration du groupe des
  2. les doubles guillemets ne vous permettent pas d'utiliser %PATH% pour gérer le problème des parenthèses
  3. et que contiendra une variable référencée comme %USERPROFILE% ?
0
répondu V15I0N 2017-09-23 10:19:27