Mehrere Befehle mit einer Zeile in der Windows-Befehlszeile ausführen?

65

Wie kann ich mehrere Befehle in der Windows-Befehlszeile mit nur einer einzigen Zeile ausführen?

Nehmen wir zum Beispiel an, ich möchte ein SVN-Update durchführen und dann alle Dateien an einen anderen Ort kopieren ...

svn update; copy *.* c:\development\copy\

Das funktioniert offensichtlich nicht. Gibt es ein Zeichen oder Trennzeichen wie ';' so etwas ausführen?

T. Stone
quelle

Antworten:

105

Ja da ist. Es ist &.

&& führt Befehl 2 aus, wenn Befehl 1 abgeschlossen ist, sofern er nicht fehlgeschlagen ist.

& wird trotzdem ausgeführt.

Phoshi
quelle
7
&und &&funktionieren nur unter Windows ' cmd.exe- das ist nicht DOS.
Grawity
22
'DOS' als Ausdruck wird oft verwendet, um cmd zu beschreiben , und da der Befehl svn verwendet, bezweifle ich, dass er immer noch DOS verwendet. Keine Notwendigkeit, pedantisch zu sein :)
Phoshi
Dort: urlencode.blogspot.com/2009/06/vista-desktop-june-09.html Er verwendet Windows XP. Mit Sicherheit nicht DOS (es sah nie so gut aus;))
Phoshi
8
Ich denke, es ist sicher anzunehmen, dass jeder, der "DOS" erwähnt, wirklich "Windows-Eingabeaufforderung" bedeutet. Ich werde hier auf die Sprünge gehen und sagen, dass die meisten Leute heutzutage wahrscheinlich nicht viel DOS verwenden. Vielen Dank für die Korrektur - es ist heutzutage nur ein bisschen unnötig.
Murdoch Ripper
@MurdochRipper Was meinst du? Ich sehe diese Frage gerade in DOS an. ;)
Andrew
4

Zumindest in MS-DOS 6.22 verwendete ich die Taste Ctrl+ T, um eine Art Absatzsymbol zu erhalten. Dies funktionierte genauso wie das &von Phoshi erwähnte. Dies funktioniert jedoch nur, wenn doskey.exe ausgeführt wird.

Torben Gundtofte-Bruun
quelle
4

Wenn Sie mehrere Befehle mit einer Zeile ausführen möchten, mit der Sie die Befehle startbeispielsweise starten , wenn Sie einen Befehl wie diesen ausführen möchten :

start "" netsh dump && pause

Dann müssen Sie dies in zwei Schritten tun (eine einzeilige Lösung befindet sich am Ende dieser Antwort).

Schreiben Sie zuerst die Befehle in eine temporäre Batch-Datei (in diesem Fall können Sie &oder verwenden &&):

echo netsh dump ^&^& pause ^&^& exit>foobar.cmd
  -or-
echo netsh dump ^& pause ^& exit>foobar.cmd

Beachten Sie, dass Sie jedes "&"s(kaufmännische Und) mit einem "Escape" versehen müssen "^" , damit sie im echoBefehl als normale Zeichen behandelt werden können . Alternativ können Sie die temporäre Stapeldatei mit einem Texteditor wie z. B. Notepad erstellen.

Verwenden Sie dann start, um die Batch-Datei zu starten:

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


Hinweis: Das leere Paar doppelter Anführungszeichen ist für das "Title", das in der Titelleiste des Befehlsfensters angezeigt startwird, das geöffnet wird. Dieses "Title"Argument ist technisch gesehen ein optionales Argument für start, es ist jedoch tatsächlich erforderlich , wenn der startauszuführende Befehl in doppelten Anführungszeichen steht. Zum Beispiel im zweiten Beispiel:

start "" "temporary foobar.cmd"

Wenn Sie das leere Paar doppelter Anführungszeichen weglassen:

start "temporary foobar.cmd"

Dann startwird ein neues Befehlsfenster geöffnet und "temporary foobar.cmd"als neues Befehlsfenster verwendet "Title", und im neuen Befehlsfenster wird nichts ausgeführt.)

Wenn Sie startwarten möchten, bis die Batchdatei abgeschlossen ist (nachdem das pauseSymbol geschlossen wurde), bevor startder /wVorgang abgeschlossen ist, müssen Sie den Schalter zum startBefehl hinzufügen :

start "" /w foobar.cmd

Sie können dies alles in einer Zeile zusammenfassen und sogar die temporäre Batchdatei ( foobar.cmd) entfernen (löschen ):

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

Beachten Sie, dass Sie zum Löschen der temporären Stapeldatei startden /wSwitch verwenden müssen. Andernfalls wird die temporäre Stapeldatei wahrscheinlich gelöscht, bevor sie ausgeführt werden kann.

Kevin Fegan
quelle
Stattdessen /wkönnte man kurz schlafen gehen, bevor man die Datei löscht. timeout 2werde es zum Beispiel tun.
Antonio
@ kevin-fegan warum brauchst du eine temporäre cmd datei ???
Maxxyme
0

Wenn Sie den ersten Befehl mit einem if umbrechen möchten, aber trotzdem möchten, dass der zweite Befehl ausgeführt wird, müssen Sie auch das if mit einem cmd / c wie folgt umbrechen:

cmd / c falls vorhanden abc. (rd / q abc) & hallo echo

Wenn Sie dem if nicht cmd / c voranstellen, wird der gesamte Befehl Teil von if (was Sie möglicherweise nicht möchten).


quelle
Oder Sie könnten sagen(if exist abc. command₁) & command₂
Scott
@Scott Ich weiß, dass Komplimente auf diesen Websites eine Sünde sind, aber sie start "" cmd /c "(command₁) & (command₂)"werden auf keinen Fall im Web beantwortet, sondern sind die einzige Möglichkeit, die meisten Stapelanweisungen zu verknüpfen. Glückwunsch.
John Kens
1
Ich freue mich über Komplimente / Glückwünsche, aber ich verstehe nicht, was Sie sagen. user138334 sagte : „Falls Sie den ersten Befehl mit einem wickeln wollen ifaber wie der zweite Befehl noch würde unabhängig auszuführen dann dann Sie die wrap haben ifmit einem cmd /cals auch“, und ich antwortete mit einer Art und Weise tun , ohne cmd /c. Warum sagen Sie also, dass die einzige Möglichkeit, die meisten Stapelanweisungen zu verknüpfen, die Verwendung von ist cmd /c? Und warum wirfst du startin die Mischung?
Scott
0

Ja nutzen &!

%command1% & %command2% führt beide Befehle aus

%command1% && %command2% Führt den ersten Befehl aus. Wenn dies funktioniert hat, führe den zweiten Befehl aus

%command1% || %command2% Führt den ersten Befehl aus. Wenn dies fehlschlägt, führe den Sekundenbefehl aus

Sehen Sie hier

KIRBY INHALES U
quelle
Und außerdem &, &&und ||eigentlich kein Befehl, ist es Teil des Stapels. Kein Befehl.
KIRBY INHALES U
Und %command%kann diese Zeichenfolge als Befehl ausführen, siehe hier
KIRBY INHALES U
-1

Ich habe festgestellt, dass die Verwendung von 'START' mehrere funktionierende Befehle behebt (ich führe Windows 10 Home aus). Zum Beispiel:

START chrome.exe "page.web.com" & timeout 20
bazzakay
quelle
Antworten sollten keine Kommentare enthalten, wie "Danke dafür", da dies von Ihrer Lösung ablenkt. Sie sollten in Betracht ziehen, diese Antwort zu bearbeiten, damit sie die Frage einfach mit so vielen Details wie möglich beantwortet, aber ohne das Rauschen (dh den Befehl, der nicht funktioniert)
Ramhound
Was er sucht, ist &, nicht start!
NetwOrchestration
Welches Problem löst das? Was passiert, wenn Sie die Befehlszeile ohne starteingeben?
Scott
-2

Erstellen Sie eine Batch-Datei mit einem kurzen Namen, zB bat.bat .

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

und so weiter bis 9 Zeilen und speichern

Verwenden Sie es dann mit doppelten Anführungszeichen

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

cmd /c Führt jeden Befehl aus und fährt die nächste Zeile herunter, ohne zu sagen, dass dies besser ist als &&, nur dass es einfach ist.

Bob
quelle