web-dev-qa-db-fra.com

Exécuter plusieurs commandes avec 1 ligne dans la ligne de commande Windows?

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?

64
T. Stone

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.

105
Phoshi

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 que start ouvrira. Cet argument "Title" est techniquement un argument optionnel à start, mais il s’agit en fait de requis , si la commande que start 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é.

4
Kevin Fegan

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.

4

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

0
KIRBY INHALES U

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).

0
user138334