&&
Es ist notorisch schwer, auf Google zu suchen, aber das Beste, was ich gefunden habe, ist dieser Artikel, in dem es heißt, ihn zu verwenden -and
.
Leider gibt es keine weiteren Informationen und ich kann nicht herausfinden, was ich damit machen soll -and
(wieder eine notorisch schwierige Sache zu suchen)
Der Kontext, in dem ich es verwenden möchte, lautet "cmd1 ausführen und bei Erfolg cmd2 ausführen".
csc /t:exe /out:a.exe SomeFile.cs && a.exe
Dies sollte ein paar einfache Wiederholungspunkte für jemanden sein, der weiß, danke!
Bearbeiten: Wenn Sie nur mehrere Befehle in einer einzigen Zeile ausführen möchten und es Ihnen egal ist, ob der erste fehlschlägt oder nicht, können Sie verwenden. ;
Für die meisten meiner Zwecke ist dies in Ordnung
Zum Beispiel : kill -n myapp; ./myapp.exe
.
syntax
powershell
Orion Edwards
quelle
quelle
&&
und||
Teil von PowerShell wird: Stimmen Sie hier für die Funktion ab .!sym
.&&
und||
! Wiegen Sie sich am GitHub PRAntworten:
In CMD bedeutet '&&' "Befehl 1 ausführen, und wenn dies erfolgreich ist, Befehl 2 ausführen". Ich habe es für Dinge wie verwendet:
In PowerShell können Sie am nächsten Folgendes tun:
Es hat die gleiche Logik, aber der Ausgabetext der Befehle geht verloren. Vielleicht ist es aber gut genug für dich.
Wenn Sie dies in einem Skript tun, ist es wahrscheinlich besser, die Anweisungen wie folgt zu trennen:
27.11.2019 : Der
&&
Operator ist jetzt für PowerShell 7 Preview 5+ verfügbar :quelle
build ; if ($?) { run_tests }
über die Befehlszeile tun .bash
PowerShell Ideen auferlegt . Es ist die grundlegende Shell-Funktionalität. Bisher ist das Beste, was ich gesehen habe,build ; if ($?) { run_tests }
das ich von nun an verwenden werde. Ich hoffe, das PowerShell-Team bietet&&
Unterstützung!&& und || waren auf der Liste der zu implementierenden Dinge (sind es noch), wurden jedoch nicht als die nächst nützlichste hinzuzufügende Sache angezeigt. Der Grund ist, dass wir -AND und -OR haben. Wenn Sie der Meinung sind, dass dies wichtig ist, reichen Sie bitte einen Vorschlag für Connect ein. Wir werden ihn für V3 in Betracht ziehen.
quelle
-AND
-and
die Ausgabe frisst, überhaupt nicht gleichwertig.Versuche dies:
quelle
$ErrorActionPreference
regelt nur, wie von Cmdlets gemeldete nicht terminierende Fehler behandelt werden. Externe Dienstprogramme wiecsc
unda.exe
melden solche Fehler niemals (sie spiegeln nur ihren Exit-Status in$?
(Erfolgsflag) und$LASTEXITCODE
(den angegebenen spezifischen Exit-Code) wider ), sodass Ihre Befehlszeile der bedingungslosen Ausführung beider Befehle gleichkommt (das Äquivalent voncmd
'scsc /t:exe /out:a.exe SomeFile.cs & a.exe
)Wenn Ihr Befehl in cmd.exe verfügbar ist (so etwas wie ein
python ./script.py
PowerShell-Befehl wieii .
(dies bedeutet, dass das aktuelle Verzeichnis vom Explorer geöffnet wird)), können Sie cmd.exe in PowerShell ausführen. Die Syntax lautet wie folgt:Hier
&&
wird durch die in dieser Frage beschriebene cmd-Syntax bereitgestellt .quelle
Ich habe diese Befehlsfolge in PowerShell ausprobiert:
Erster Test
($MyVar -ne $null)
hat true zurückgegeben und(Get-Content $MyVar)
auch true zurückgegeben .Zweiter Test
($MyVar -ne $null)
zurück falsch und so weit muss ich das übernehmen(Get-Content $MyVar)
auch wieder falsch .Der dritte Test bewies, dass der zweite Zustand nicht einmal analysiert wurde.
($MyVar -ne $null)
gab false zurück und bewies, dass die zweite Bedingung(Get-Content "C:\MyTxt.txt")
nie ausgeführt wurde, indem false für den gesamten Befehl zurückgegeben wurde.quelle
Sehr alte Frage, aber für die Neulinge: Vielleicht soll die PowerShell-Version (ähnlich, aber nicht gleichwertig ), nach der die Frage sucht,
-and
wie folgt verwendet werden:(build_command) -and (run_tests_command)
quelle
&&
, dass der Exit-Code von ignoriert wirdbuild_command
.;
ist das Äquivalent zu&
in cmd und;
in bash. Es ist definitiv nicht das gleiche wie&&
in cmdEs hängt vom Kontext ab, aber hier ist ein Beispiel für "-und" in Aktion:
Damit werden alle Dateien größer als 10 KB in einem Verzeichnis, dessen Dateiname mit "f" beginnt.
quelle
Es ist etwas länger als "&&", erreicht aber das Gleiche ohne Skripte und ist nicht allzu schwer zu merken. Besser spät als nie. :) :)
quelle
Start-Process
ist das falsche Tool zum Aufrufen von Befehlszeilenprogrammen im Allgemeinen. Insbesondere hier verwendet wird ,Start-Process
läuftfilename1.exe
asynchron in einem neuen Konsolenfenster und kehrt nichts , die in einem Booleschen Kontext ausgewertet$false
. Selbst wenn Sie weglassenStart-Process
(wie Sie Befehlszeilen-Dienstprogramme direkt aufrufen sollten), würde der Ansatz zu kurz kommen, da das Ergebnis der Bedingung dann davon abhängt, ob das Dienstprogramm eine Standardausgabe erzeugt hat, die keine garantierte Beziehung zu dieser hat erfolgreich oder nicht.Ich denke, eine einfache if-Anweisung kann dies erreichen. Nachdem ich gesehen habe, dass die Antwort von mkelement0 über dem letzten Exit-Status in $? Gespeichert ist, habe ich Folgendes zusammengestellt:
Für das Beispiel der Operation wäre es also:
quelle
Ein ausführliches Äquivalent ist zu kombinieren
$LASTEXITCODE
und-eq 0
:Ich bin mir nicht sicher, warum
if ($?)
es bei mir nicht funktioniert hat, aber dieser hat es getan.quelle
Wir können diesen Befehl versuchen, anstatt die Methode && zu verwenden
try {hostname; if ($ lastexitcode -eq 0) {ipconfig / all | findstr / i bios}} catch {echo err} endlich {}
quelle
try
/catch
, weil es nur für notwendig ist beendet Fehler, die externen Versorgungsleistungen wiehostname
,ipconfig
undfindstr
nicht auslösen können. Die Überprüfung$LASTEXITCODE
ist nur erforderlich, wenn Sie den von einem externen Dienstprogramm festgelegten spezifischen Exit-Code kennen möchten. Der Erfolg oder Misserfolg einer Zusammenfassung spiegelt sich$?
ebenso wider wie bei nativen Cmdlets.&&
in Unix ist Try / Catch insofern sehr ähnlich,}
als Sie nachfolgende Befehle nicht in einen neuen Block einschließen müssen (dh ), wenn Sie spätere Befehle kurzschließen (überspringen). Ich denke, eineAmpAmp
Funktion / ein Filter, die wann auslöst,if (!?) { throw "last command failed" }
wäre ein sehr nützlicher Ersatz für die Portierung&&
auf PowerShell. Verwendung :csc /t:exe /out:a.exe SomeFile.cs; AmpAmp; a.exe