it-swarm.com.de

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

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

Angenommen, ich möchte ein SVN-Update durchführen und dann alle Dateien an einen anderen Speicherort kopieren ...

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

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

65
T. Stone

Ja da ist. Es ist &.

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

& wird trotzdem ausgeführt.

105
Phoshi

Wenn Sie mehrere Befehle mit einer Zeile ausführen möchten, starten Sie die Befehle mit start, wenn Sie beispielsweise 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 Batchdatei (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 jeden "&"s (kaufmännisches Und) mit einem "^" "maskieren" müssen, damit diese im Befehl echo als normale Zeichen behandelt werden können. Alternativ können Sie die temporäre Stapeldatei mit einem Texteditor wie Notepad erstellen.

Verwenden Sie dann start, um die Batchdatei zu starten:

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


Hinweis: Das leere Paar doppelter Anführungszeichen steht für den "Title", der in der Titelleiste des Befehlsfensters angezeigt wird, das start öffnet. Dieses "Title"-Argument ist technisch gesehen ein optionales Argument für start, aber es ist tatsächlich erforderlich , wenn der Befehl, den start ausführen soll, in doppelte Anführungszeichen gesetzt ist. Zum Beispiel im zweiten Beispiel:

start "" "temporary foobar.cmd"

wenn Sie das leere Paar doppelter Anführungszeichen weglassen:

start "temporary foobar.cmd"

dann öffnet start ein neues Befehlsfenster und verwendet "temporary foobar.cmd" als neues Befehlsfenster "Title" und nothing wird im neuen Befehlsfenster ausgeführt.)

Wenn Sie möchten, dass start auf den Abschluss der Batchdatei wartet (nachdem die pause geschlossen wurde), müssen Sie vor dem Abschluss der start den Schalter /w zum Befehl start hinzufügen:

start "" /w foobar.cmd

Sie können dies alles in einer Zeile zusammenfassen und sogar die temporäre Batch-Datei (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 start mit dem Schalter /w ausführen müssen. Andernfalls wird die temporäre Stapeldatei wahrscheinlich gelöscht, bevor sie ausgeführt werden kann.

4
Kevin Fegan

Zumindest in MS-DOS 6.22 habe ich den Schlüssel benutzt Ctrl+T um eine Art Absatzsymbol zu erhalten. Das hat genauso funktioniert wie das & von Phoshi erwähnt. Dies funktioniert jedoch nur, wenn doskey.exe ausgeführt wird.

Ja & verwenden!

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

%command1% && %command2% führt den ersten Befehl aus, wenn dies funktioniert hat, führen Sie den zweiten Befehl aus

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

Siehe hier

0
KIRBY INHALES U

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

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

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

0
user138334