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

65

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?

T. Stone
la source

Réponses:

105

Oui il y a. C'est &.

&& exécute la commande 2 lorsque la commande 1 est terminée, à condition qu'elle n'ait pas échoué.

& s'exécutera indépendamment.

Phoshi
la source
7
&et &&ne fonctionne que sous Windows ' cmd.exe- ce qui n’est pas le DOS.
grawity
22
Le terme "DOS" est souvent utilisé pour décrire cmd, et vu que l'op utilise svn, je doute fort qu'il utilise encore le DOS. Pas besoin d'être pédant :)
Phoshi Le
Il utilise : urlencode.blogspot.com/2009/06/vista-desktop-june-09.html. Il utilise Windows XP. Certainement pas DOS (ça n'a jamais été aussi beau;))
Phoshi
8
Je pense qu'il est prudent de supposer que lorsque quelqu'un mentionne "DOS", il signifie vraiment "invite de commande Windows". Je vais me faire remarquer et dire que la plupart des gens n'utilisent probablement pas beaucoup le DOS de nos jours. Merci pour la correction - c'est juste un peu inutile de nos jours.
Murdoch Ripper
@MurdochRipper Que voulez-vous dire? Je regarde cette question sous DOS en ce moment. ;)
Andrew
4

Au moins dans MS-DOS 6.22, j’utilisais la touche Ctrl+ Tpour obtenir une sorte de symbole de paragraphe. Cela a fonctionné comme l'a &mentionné Phoshi. Cela ne fonctionnera cependant que si doskey.exe est en cours d'exécution.

Torben Gundtofte-Bruun
la source
4

Si vous souhaitez exécuter plusieurs commandes sur une ligne, startpar exemple, si vous souhaitez les exécuter, 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 echocommande. Vous pouvez également créer le fichier de commandes temporaire avec un éditeur de texte, tel que le Bloc-notes.

Ensuite, utilisez startpour démarrer le fichier de commandes:

start "" foobar.cmd
  -or-
start "" "temporary foobar.cmd"


Remarque: La paire vide de guillemets doubles est "Title"celle qui sera affichée dans la barre de titre de la fenêtre de commande qui starts’ouvrira. "Title"Techniquement, cet argument est un argument facultatifstart , mais il est en fait requis si la commande à startexécuter est entre guillemets doubles. 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"

puis startouvrira une nouvelle fenêtre de commande et l’utilisera "temporary foobar.cmd"comme nouvelle fenêtre de commande "Title"; rien ne sera exécuté dans la nouvelle fenêtre de commande.)

Si vous souhaitez startattendre la fin du fichier de commandes (après que le fichier a pauseété rejeté), avant que l'opération soit startterminée, vous devez ajouter le /wcommutateur à la startcommande:

start "" /w foobar.cmd

Vous pouvez regrouper tous ces éléments sur une 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 souhaitez supprimer le fichier de commandes temporaire, vous devez l'exécuter startavec le /wcommutateur. Sinon, le fichier de commandes temporaire sera probablement supprimé avant de pouvoir être exécuté.

Kevin Fegan
la source
Au lieu de cela, /wvous pouvez mettre un court sommeil avant de supprimer le fichier. timeout 2va le faire, par exemple.
Antonio
@ kevin-fegan pourquoi avez-vous besoin d'un fichier cmd temporaire ???
maxxyme
0

Si vous voulez 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).


la source
Ou vous pourriez dire(if exist abc. command₁) & command₂
Scott
@ Scott Je sais que les compliments sont un péché sur ces sites, mais start "" cmd /c "(command₁) & (command₂)"ne peuvent être répondus nulle part sur le Web, mais constituent le seul moyen de lier la plupart des instructions de traitement par lots. Félicitations à vous.
John Kens
1
J'apprécie les compliments / félicitations, mais je ne comprends pas ce que vous dites. user138334 a déclaré: «Si vous voulez envelopper la première commande avec un ifmais que la deuxième commande soit exécutée malgré tout, vous devez aussi envelopper le ifavec un cmd /c», et j'ai répondu avec un moyen de le faire sans cmd /c. Alors, pourquoi dites-vous que le seul moyen de lier la plupart des instructions de traitement par lots consiste à utiliser cmd /c? Et pourquoi jetez-vous startdans le mélange?
Scott
0

Oui utiliser &!

%command1% & %command2% exécute les deux commandes

%command1% && %command2% lance la première commande, si cela fonctionne, lance la seconde commande

%command1% || %command2% lance la première commande, si cela échoue, lance la commande secondes

Voir ici

KIRBY INHALES U
la source
Et aussi &, &&et ||ne sont pas réellement une commande, cela fait partie du lot. Pas une commande.
KIRBY INHALES U
Et %command%peut exécuter cette chaîne en tant que commande, vue ici
KIRBY INHALES U
-1

J'ai constaté que l'utilisation de 'START' corrigeait le fonctionnement de plusieurs commandes (j'utilise Windows 10 Home). Par exemple:

START chrome.exe "page.web.com" & timeout 20
Bazzakay
la source
Les réponses ne doivent pas contenir de commentaire, comme "Merci pour cela", cela distrait votre solution. Vous devriez envisager de modifier cette réponse, donc elle répond simplement à la question, avec autant de détails que possible mais sans le bruit (c'est-à-dire la commande qui ne fonctionne pas)
Ramhound
Ce qu'il cherche n'est &pas start!
NetwOrchestration
Quel problème cela résout-il? Que se passe-t-il lorsque vous tapez la ligne de commande sans start?
Scott
-2

faire un fichier de commandes avec un nom court, c'est-à-dire bat.bat .

add cmd /c %1 
    cmd /c %2 
rem

et ainsi de suite jusqu'à 9 lignes et économisez

puis utilisez-le avec des guillemets

bat "command one" "command two" "command three" 

cmd /c exécute chaque commande et ferme la ligne suivante sans indiquer que c'est mieux que && simplement que c'est facile.

bob
la source