Comment puis-je exécuter plusieurs commandes dans la ligne de commande Windows avec une seule ligne?
Par exemple, disons que je souhaite effectuer une mise à jour SVN, puis copier tous les fichiers dans un autre emplacement ...
svn update; copy *.* c:\development\copy\
Cela ne fonctionne pas évidemment. Y a-t-il un caractère ou un délimiteur comme ';' faire quelque chose comme ça?
Oui il y a. Ses &.
&&
exécutera la commande 2 à la fin de la commande 1, à condition qu'elle n'ait pas échoué.
&
sera exécuté indépendamment.
Si vous souhaitez exécuter plusieurs commandes avec 1 ligne, où vous démarrez les commandes avec start
, par exemple, si vous souhaitez exécuter une commande comme celle-ci:
start "" netsh dump && pause
Ensuite, vous devez le faire en 2 étapes (une solution à une ligne est à la fin de cette réponse).
Commencez par écrire les commandes dans un fichier de commandes temporaire (dans ce cas, vous pouvez utiliser &
ou &&
):
echo netsh dump ^&^& pause ^&^& exit>foobar.cmd
-or-
echo netsh dump ^& pause ^& exit>foobar.cmd
Notez que vous devez "échapper" chacun des "&"s
(esperluettes) avec un "^"
pour leur permettre d'être traités comme des caractères ordinaires dans la commande echo
. Vous pouvez également créer le fichier de commandes temporaire avec un éditeur de texte, tel que le Bloc-notes.
Ensuite, utilisez start
pour démarrer le fichier de commandes:
start "" foobar.cmd
-or-
start "" "temporary foobar.cmd"
Remarque: La paire vide de guillemets doubles est pour le
"Title"
qui sera affiché dans la barre de titre de la fenêtre de commande questart
ouvrira. Cet argument"Title"
est techniquement un argument optionnel àstart
, mais il s’agit en fait de requis , si la commande questart
exécutera est entre guillemets. Par exemple, dans le deuxième exemple:
start "" "temporary foobar.cmd"
si vous laissez de côté la paire vide de guillemets doubles comme ceci:
start "temporary foobar.cmd"
alors
start
ouvrira une nouvelle fenêtre de commande et utilisera"temporary foobar.cmd"
comme nouvelle fenêtre de commande"Title"
et rien sera exécuté dans la nouvelle fenêtre de commande.)
Si vous souhaitez que start
attende la fin du fichier de commandes (une fois que pause
est congédié), avant que start
ne se termine, vous devez ajouter le commutateur /w
à la commande start
:
start "" /w foobar.cmd
Vous pouvez regrouper tous ces éléments sur une seule ligne et même supprimer (supprimer) le fichier de traitement par lots temporaire (foobar.cmd
):
echo netsh dump ^&^& pause ^&^& exit>foobar.cmd && start "" /w foobar.cmd && del foobar.cmd
-or-
echo netsh dump ^& pause ^& exit>foobar.cmd & start "" /w foobar.cmd & del foobar.cmd
Notez que si vous envisagez de supprimer le fichier de commandes temporaire, vous devez exécuter start
avec le commutateur /w
. Sinon, le fichier de commandes temporaire sera probablement supprimé avant de pouvoir être exécuté.
Au moins dans MS-DOS 6.22, j'avais l'habitude d'utiliser la clé Ctrl+T pour obtenir une sorte de symbole de paragraphe. Cela a fonctionné comme le & mentionné par Phoshi. Cela ne fonctionnera cependant que si doskey.exe est en cours d'exécution.
Oui utilisez &
!
%command1% & %command2%
exécute les deux commandes
%command1% && %command2%
exécute la première commande, si cela fonctionne, exécutez la deuxième commande
%command1% || %command2%
exécute la première commande, si cela échoue, exécutez la commande secondes
Voir ici
Si vous souhaitez envelopper la première commande avec un if, mais que la deuxième commande soit exécutée indépendamment, vous devez alors envelopper le if avec un cmd/c comme ceci:
cmd/c s'il existe abc. (rd/q abc) & echo hello
Si vous ne préfixez pas if avec cmd/c, alors la commande entière fera partie de if (ce que vous ne voudrez peut-être pas).