it-swarm.com.de

Wie führe ich in Windows CMD zwei Befehle in einer Zeile aus?

Ich möchte zwei Befehle in einer Windows CMD-Konsole ausführen.

In Linux würde ich das so machen

touch thisfile ; ls -lstrh

Wie wird es unter Windows gemacht?

740
flybywire

So auf allen Microsoft-Betriebssystemen seit 2000 und heute noch gut:

dir & echo foo

Wenn Sie möchten, dass der zweite Befehl nur ausgeführt wird, wenn der erste Befehl erfolgreich beendet wurde:

dir && echo foo

Die einzige Ampersand (&) - Syntax zum Ausführen mehrerer Befehle in einer Zeile geht auf Windows XP, Windows 2000 und einige frühere NT-Versionen zurück. (Mindestens 4.0, laut einem Kommentar hier.)

Es gibt noch einige andere Punkte, die Sie auf dieser Seite nach unten scrollen können.

Es folgen historische Daten für diejenigen, die es für pädagogisch halten.

Zuvor war die Syntax && nur eine Funktion des 4DOS der Shell-Ersetzung, bevor diese Funktion zum Microsoft-Befehlsinterpreter hinzugefügt wurde.

In Windows 95, 98 und ME würden Sie stattdessen das Pipe-Zeichen verwenden:

dir | echo foo

In MS-DOS 5.0 und höher war das (undokumentierte) Befehlstrennzeichen durch einige frühere Windows- und NT-Versionen des Befehlsinterpreters Zeichen 20 (Strg + T), das ich hier mit ^ T repräsentiere.

dir ^T echo foo
1005
djdanlib

Ein Zitat aus der Dokumentation:

Mehrere Befehle und bedingte Verarbeitungssymbole verwenden

Sie können mehrere Befehle über eine einzige Befehlszeile oder ein Skript mit bedingten Verarbeitungssymbolen ausführen. Wenn Sie mehrere Befehle mit Symbolen für bedingte Verarbeitung ausführen, wirken die Befehle rechts vom Symbol für bedingte Verarbeitung auf der Grundlage der Ergebnisse des Befehls links vom Symbol für bedingte Verarbeitung. 

Beispielsweise möchten Sie möglicherweise einen Befehl nur ausführen, wenn der vorherige Befehl fehlschlägt. Oder Sie möchten einen Befehl nur ausführen, wenn der vorherige Befehl erfolgreich ist.

Sie können die in der folgenden Tabelle aufgeführten Sonderzeichen verwenden, um mehrere Befehle zu übergeben.

  • & [...]
    command1 & command2
    Trennen Sie mehrere Befehle in einer Befehlszeile voneinander. Cmd.exe führt den ersten Befehl und dann den zweiten Befehl aus.

  • && [...]
    command1 && command2
    Verwenden Sie diese Option, um den Befehl nach && nur auszuführen, wenn der Befehl vor dem Symbol erfolgreich ist. Cmd.exe führt den ersten Befehl und dann den zweiten Befehl nur dann aus, wenn der erste Befehl erfolgreich ausgeführt wurde. 

  • || [...]
    command1 || command2
    Führen Sie den Befehl nach || aus nur wenn der Befehl vor || schlägt fehl Cmd.exe führt den ersten Befehl und dann den zweiten Befehl nur dann aus, wenn der erste Befehl nicht erfolgreich ausgeführt wurde (er erhält einen Fehlercode, der größer als Null ist).

  • ( ) [...]
    (command1 & command2)
    Verwenden Sie diese Option, um mehrere Befehle zu gruppieren oder zu verschachteln.

  • ; or ,
    command1 parameter1;parameter2
    Verwenden Sie diese Option, um die Befehlsparameter zu trennen.

519
Raihan

& ist das Bash-Äquivalent für ; (Laufbefehle) und && ist das Bash-Äquivalent von && (Laufbefehle nur, wenn der vorherige Fehler nicht verursacht hat).

65
manojlds

Mit & können Sie Befehle nacheinander ausführen. Beispiel: c:\dir & vim myFile.txt

23
scrappedcola

Wenn Sie eine Cmd-Verknüpfung erstellen möchten (z. B. auf Ihrem Desktop), fügen Sie den Parameter/k hinzu (/ k bedeutet, dass/c das Fenster schließt):

cmd /k echo hello && cd c:\ && cd Windows
16
TroodoN-Mike

Sie können call verwenden, um das Problem der zu frühen Auswertung von Umgebungsvariablen zu lösen - z.

set A=Hello & call echo %A%
11
SSi

Daher habe ich versucht, die spezielle Aufgabe zum Ausführen von RegAsm (Assembly registrieren) über ein Kontextmenü zu aktivieren. Das Problem, das ich hatte, war, dass das Ergebnis aufblitzen und verschwinden würde, bevor ich es lesen konnte. Also habe ich versucht, eine Pipeline an Pause zu senden, was nicht funktioniert, wenn der Befehl fehlschlägt (wie hier erwähnt Pause-Befehl funktioniert nicht im .bat-Skript und hier Batch-Dateibefehl PAUSE) nicht funktionieren ). Also habe ich versucht cmd /k aber das lässt das Fenster für weitere Befehle offen (ich möchte nur das Ergebnis lesen). Also habe ich der Kette ein pause gefolgt von exit hinzugefügt, woraus sich Folgendes ergibt:

cmd /k C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe "%1" /codebase \"%1\" & pause & exit

Dies funktioniert wie ein Zauber: RegAsm führt die Datei aus und zeigt ihre Ergebnisse an. Anschließend wird eine Eingabeaufforderung mit der Aufforderung "Drücken Sie eine beliebige Taste, um fortzufahren ..." angezeigt. Das Eingabeaufforderungsfenster wird dann geschlossen, wenn eine Taste gedrückt wird.

P.S. Für andere, die interessiert sein könnten, können Sie die folgenden .reg-Dateieinträge verwenden, um .dll-Dateien eine DLL-Dateizuordnung und anschließend eine RegAsm-Befehlserweiterung hinzuzufügen (beachten Sie die Anführungszeichen und umgekehrten Schrägstriche):

[HKEY_CLASSES_ROOT\.dll]
"Content Type"="application/x-msdownload"
@="dllfile"

[HKEY_CLASSES_ROOT\dllfile]
@="Application Extension"

[HKEY_CLASSES_ROOT\dllfile\Shell\RegAsm]
@="Register Assembly"

[HKEY_CLASSES_ROOT\dllfile\Shell\RegAsm\command]
@="cmd /k C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\regasm.exe \"%1\" /codebase \"%1\" & pause & exit"

Jetzt habe ich ein Nizza Rechtsklick-Menü, um eine Assembly zu registrieren.

7
SNAFUBAR

Eine Anzahl von verarbeitenden Symbolen kann verwendet werden, wenn mehrere Befehle in derselben Zeile ausgeführt werden. In einigen Fällen kann dies zu einer Umleitung der Verarbeitung führen, in anderen Fällen die Ausgabe ändern oder einfach fehlschlagen. Ein wichtiger Fall ist das Platzieren von Befehlen in derselben Zeile, in denen Variablen bearbeitet werden.

@echo off
setlocal enabledelayedexpansion
set count=0
set "count=1" & echo %count% !count!

0 1

Wie Sie im obigen Beispiel sehen, müssen Sie zum Aktualisieren Ihrer Variablenwerte verzögerte Erweiterungen verwenden, wenn Befehle, die Variablen verwenden, in derselben Zeile platziert werden. Wenn Ihre Variable indiziert ist, verwenden Sie den CALL-Befehl mit den Modifizierern %%, um den Wert in derselben Zeile zu aktualisieren:

set "i=5" & set "arg!i!=MyFile!i!" & call echo path!i!=%temp%\%%arg!i!%%

path5=C:\Users\UserName\AppData\Local\Temp\MyFile5
6
sambul35

cmd /c ipconfig /all & Output.txt

Dieser Befehl führt den Befehl aus und öffnet die Output.txt-Datei in einem einzigen Befehl

5
dpp.2325

Um zwei Befehle gleichzeitig auszuführen, müssen Sie ein & (kaufmännisches Und) -Symbol zwischen den beiden Befehlen einfügen. So wie:

color 0a & start chrome.exe

Prost!

3
PryroTech

Ich versuche, zwei Pings im selben Fenster zu haben, und es ist ein serieller Befehl in derselben Zeile. Führen Sie nach Abschluss des ersten Befehls den zweiten Befehl aus.

Die Lösung bestand in der Kombination mit start /b in einer Windows 7-Eingabeaufforderung.

Starten Sie wie gewohnt ohne /b und starten Sie in einem separaten Fenster.

Der Befehl, der in derselben Zeile gestartet wird, lautet:

start /b command1 parameters & command2 parameters

Wie auch immer, wenn Sie die Ausgabe analysieren möchten, empfehle ich nicht, diese zu verwenden. Ich habe festgestellt, dass die Ausgabe zwischen den Ausgaben der Befehle verwürfelt ist.

3
sdcxp

Nun, Sie haben zwei Möglichkeiten: Piping oder einfach &:

DIR /S & START FILE.TXT

Oder,

tasklist | find "notepad.exe"

Piping (|) dient eher dazu, die Ausgabe eines Befehls zu übernehmen und ihn in einen anderen zu setzen. Und (&) sagt nur: Laufen Sie das und das. 

3
PyDever

Nein, cd / && tree && echo %time%. Die Echozeit ist zu dem Zeitpunkt, zu dem der erste Befehl ausgeführt wird.

Die Verrohrung hat einige Probleme, ist aber nicht kritisch, solange die Leute wissen, wie es funktioniert.

1
notarealname

Wenn Sie versuchen, Variablen in einer Zeile zu verwenden oder zu manipulieren, achten Sie auf deren Inhalt! Z.B. eine Variable wie die folgende

PATH=C:\Program Files (x86)\somewhere;"C:\Company\Cool Tool";%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;

kann zu unhandlichen Problemen führen, wenn Sie es als %PATH% verwenden

  1. Die abschließenden Klammern beenden Ihre Gruppenaussage
  2. Die doppelten Anführungszeichen erlauben es nicht, %PATH% zur Behandlung des Problems in Klammern zu verwenden
  3. Und was wird eine referenzierte Variable wie %USERPROFILE% enthalten?
0
V15I0N

Ein weiteres Beispiel: Zum Beispiel, wenn wir das Buildsystem gulp anstelle von verwenden

gulp - default> build

gulp build - Build-Ordner erstellen

gulp watch - Starten Sie die Dateiüberwachung

gulp dist - Dist-Ordner erstellen

Wir können das mit einer Zeile machen:

cd c:\xampp\htdocs\project & gulp & gulp watch
0
Mile Mijatovic

Ja da ist. Es ist &.

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

& wird trotzdem ausgeführt.

Es ist ganz einfach: Unterscheide sie einfach mit && Zeichen Beispiel: 

echo Hello World && echo GoodBye World

Goodbye World wird nach Hello World gedruckt.

0
Rajan Dhanowa