Comment exécuter deux commandes en une seule ligne dans Windows CMD?
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
une citation de la documentation:
- Source: Microsoft, Windows XP Professional Product Documentation, Command shell overview
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.
&
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).
Vous pouvez utiliser et d'exécuter des commandes l'une après l'autre. Exemple: c:\dir & vim myFile.txt
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
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%
cmd /c ipconfig /all & Output.txt
cette commande exécute la commande et ouvre le fichier Output.txt
en une seule commande
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.
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
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é!
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.
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.
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.
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.
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
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%
- Les parenthèses de fermeture de mettre fin à votre déclaration du groupe des
- les doubles guillemets ne vous permettent pas d'utiliser
%PATH%
pour gérer le problème des parenthèses - et que contiendra une variable référencée comme
%USERPROFILE%
?