Ich möchte zwei Befehle in einer Windows CMD-Konsole ausführen.
Unter Linux würde ich das so machen
touch thisfile ; ls -lstrh
Wie geht das unter Windows?
quelle
Ich möchte zwei Befehle in einer Windows CMD-Konsole ausführen.
Unter Linux würde ich das so machen
touch thisfile ; ls -lstrh
Wie geht das unter Windows?
So auf allen Microsoft-Betriebssystemen seit 2000 und heute noch gut:
dir & echo foo
Wenn der zweite Befehl nur ausgeführt werden soll, wenn der erste erfolgreich beendet wurde:
dir && echo foo
Die einzelne kaufmännische Und (&) -Syntax zum Ausführen mehrerer Befehle in einer Zeile geht auf Windows XP, Windows 2000 und einige frühere NT-Versionen zurück. (Zumindest 4.0, laut einem Kommentator hier.)
Es gibt noch einige andere Punkte, die Sie auf dieser Seite finden.
Es folgen historische Daten für diejenigen, die sie als lehrreich empfinden.
Zuvor war die && -Syntax nur eine Funktion des Shell-Ersatzes 4DOS, bevor diese Funktion dem Microsoft-Befehlsinterpreter hinzugefügt wurde.
In Windows 95, 98 und ME verwenden Sie stattdessen das Pipe-Zeichen:
dir | echo foo
In MS-DOS 5.0 und höher war das (undokumentierte) Befehlstrennzeichen in einigen früheren Windows- und NT-Versionen des Befehlsinterpreters das Zeichen 20 (Strg + T), das ich hier mit ^ T darstellen werde.
dir ^T echo foo
cmd
Eingabeaufforderung, also ist es wohl keine schlechte Angewohnheit, sich darauf einzulassen . :)Ein Zitat aus der Dokumentation:
quelle
cmd /c "echo foo & echo bar"
.vagrant up && vagrant ssh
arbeitete ohne Anführungszeichen unter Windows 10.&
- macht es asynchron und läuft beide parallel. Ich steckte fest, weil ich&&
mit verwendet habe, ist synchron und fährt nur fort, wenn das erste erfolgreich ist!&
macht die Befehle nicht asynchron oder parallel.command1 & command2
wird ausgeführt,command2
nachdemcommand1
abgeschlossen wurde. Der Erfolg oder Misserfolg voncommand1
ist irrelevant.&
ist das Bash-Äquivalent für;
(Befehle ausführen) und&&
das Bash-Äquivalent von&&
(Befehle ausführen nur, wenn der vorherige keinen Fehler verursacht hat).quelle
;
in Linux gesehen;
bedeutet, den ersten Befehl auszuführen, auf den Abschluss zu warten und dann den zweiten Befehl auszuführen.&
bedeutet, den ersten Befehl auszuführen, ihn in den Hintergrund zu stellen und den zweiten Befehl auszuführen. Beide Programme werden also gleichzeitig gestartet. Beachten Sie, dass diese keine Symbole kombinieren, sondern nach dem ersten Befehl ablaufen. Sie können einen einzelnen Befehl im Hintergrund mit starten,progname &
ohne einen zweiten Befehl zu haben.Sie können & verwenden, um Befehle nacheinander auszuführen. Beispiel:
c:\dir & vim myFile.txt
quelle
Wenn Sie eine Cmd-Verknüpfung erstellen möchten (z. B. auf Ihrem Desktop), fügen Sie den Parameter / k hinzu (/ k bedeutet behalten, / c schließt das Fenster):
quelle
Sie können call verwenden , um das Problem zu überwinden, dass Umgebungsvariablen zu früh ausgewertet werden - z
quelle
echo
wird der alte Wert und nicht der neue Wert ausgedruckt. Zumindest beobachte ich dies auf meiner Windows 7-Box.setlocal EnableDelayedExpansion
in einem Skript odercmd /v
). Zum Beispiel :timeout 5 && cmd /v /c echo !TIME! && echo %TIME%
.Eine Reihe von Verarbeitungssymbolen kann verwendet werden, wenn mehrere Befehle in derselben Zeile ausgeführt werden. In einigen Fällen kann dies zu einer Verarbeitungsumleitung führen, in anderen Fällen zu einer Änderung der Ausgabe oder einfach zum Fehlschlagen. Ein wichtiger Fall ist das Platzieren von Befehlen in derselben Zeile, mit denen Variablen bearbeitet werden.
Wie Sie im obigen Beispiel sehen, müssen Sie, wenn Befehle mit Variablen in derselben Zeile platziert werden, die verzögerte Erweiterung verwenden, um Ihre Variablenwerte zu aktualisieren. Wenn Ihre Variable indiziert ist, verwenden Sie den Befehl CALL mit den Modifikatoren %%, um ihren Wert in derselben Zeile zu aktualisieren:
quelle
cmd /V:ON /c "set i=5 & set arg!i!=MyFile!i! & echo path!i!=%temp%\%arg!i!%"
cmd /c ipconfig /all & Output.txt
Dieser Befehl führt den Befehl aus und öffnet die
Output.txt
Datei in einem einzigen Befehlquelle
Also habe ich versucht, die spezifische Aufgabe des Ausführens
RegAsm
(Registerassemblierung) ü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 Weiterleitung anPause
, was nicht funktioniert, wenn der Befehl fehlschlägt (wie hier erwähnt. Der Befehl Pause funktioniert nicht im .bat-Skript und hier funktioniert der Batch-Datei-Befehl PAUSE nicht ). Also habe ich es 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 einpause
gefolgt von hinzugefügtexit
, was 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 wird für die Datei ausgeführt und zeigt die Ergebnisse an. Anschließend wird die Eingabeaufforderung "Drücken Sie eine beliebige Taste, um fortzufahren ..." angezeigt. Das Eingabeaufforderungsfenster wird geschlossen, wenn eine Taste gedrückt wird.
PS 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 maskierten Anführungszeichen und Backslashes):
Jetzt habe ich ein schönes Rechtsklick-Menü, um eine Baugruppe zu registrieren.
quelle
Um zwei Befehle gleichzeitig auszuführen, müssen Sie ein & (kaufmännisches Und) zwischen die beiden Befehle setzen. Wie so:
Prost!
quelle
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 darin, mit
start /b
einer Windows 7-Eingabeaufforderung zu kombinieren .Starten Sie wie gewohnt ohne
/b
und starten Sie in einem separaten Fenster.Der Befehl zum Starten in derselben Zeile lautet:
Wenn Sie die Ausgabe analysieren möchten, empfehle ich auf keinen Fall, diese zu verwenden. Ich habe festgestellt, dass die Ausgabe zwischen der Ausgabe der Befehle verschlüsselt ist.
quelle
Nun, Sie haben zwei Möglichkeiten: Rohrleitungen oder einfach
&
:Oder,
Piping (
|
) dient eher dazu, die Ausgabe eines Befehls in einen anderen zu übernehmen. Und (&
) sagt nur, lauf dies und das.quelle
&
und was sie|
tun und wie sie sich unterscheiden, wenn überhaupt? Derzeit können Personen, die mit diesen Konzepten nicht vertraut sind, nicht selbst entscheiden, welches in ihren Fällen verwendet werden soll.Nein
cd / && tree && echo %time%
. Die Echozeit ist der Zeitpunkt, zu dem der erste Befehl ausgeführt wird.Die Rohrleitungen haben einige Probleme, sind jedoch nicht kritisch, solange die Leute wissen, wie sie funktionieren.
quelle
Noch ein Beispiel: Zum Beispiel, wenn wir das
gulp
Build-System anstelle von verwendengulp
- Standard> Buildgulp build
- Build-Ordner erstellengulp watch
- Starten Sie die Dateiüberwachunggulp dist
- dist-Ordner erstellenWir können das mit einer Zeile machen:
quelle
Wenn Sie versuchen, Variablen in einer Zeile zu verwenden oder zu manipulieren, achten Sie auf deren Inhalt! ZB eine Variable wie die folgende
kann zu vielen unhandlichen Problemen führen, wenn Sie es als verwenden
%PATH%
%PATH%
das Problem in Klammern nicht behandeln%USERPROFILE%
enthalten?quelle
Ja da ist. Es ist
&
.&&
führt Befehl 2 aus, wenn Befehl 1 abgeschlossen ist, sofern er nicht fehlgeschlagen ist.&
wird trotzdem ausgeführt.quelle
Verwenden Sie das
&
Symbol in Fenstern, um den Befehl in einer Zeile zu verwendenwie unter Linux verwenden wir,
quelle
Es ist ganz einfach: Unterscheiden Sie sie einfach mit
&&
Zeichen. Beispiel:"Goodbye World" wird nach "Hello World" gedruckt.
quelle
&&
ist ein bedingter Operator, der nächste Befehl wird nur ausgeführt, wenn der erste Befehl erfolgreich war (errorlevel = 0)Hello World
nicht fehlgeschlagen ist. wie @jeb gesagt hat,&&
ist bedingt.&
führt Befehle aus, unabhängig davon, ob der vorherige erfolgreich war oder nicht.