Ersetzungen für kaufmännisches und / oder doppelt kaufmännisches und / oder in PowerShell


28

Im nativen CMD-Prozessor von Windows können Sie &Befehle so aneinanderreihen, dass einer unmittelbar nach dem anderen ausgeführt wird. A &&führt den zweiten Befehl nur aus, wenn der erste fehlerfrei ausgeführt wird.

Dies unterscheidet sich von Piping-Befehlen dadurch, |dass die Ausgabe des ersten Befehls nicht an den zweiten Befehl gesendet wird. Die Befehle werden einfach nacheinander ausgeführt und die Ausgabe für jeden Befehl an die übliche Stelle gesendet.

Beim Versuch, &oder &&in PowerShell zu verwenden, wird jedoch eine Fehlermeldung angezeigt. Gibt es ähnliche Funktionen in PowerShell oder ist diese Funktion veraltet?



Eine interessante Frage ist, ob die Metaprogrammierung von Powershell verwendet werden könnte, um diese Funktionalität mit&&
soandos

Antworten:


35

Der &Operator in PowerShell ist nur das ;oder Semikolon.

Der &&Operator in PowerShell muss als ifAnweisung ausgeführt werden.

Command ; if($?) {Command}


1

Probieren Sie diese Funktion aus, die ungefähr auf die gleiche Weise verwendet werden kann:

function aa() {
    if($?) {
        $command = [string]::join(' ', $args[1..99])
        & $args[0] $command
    }
}

Jetzt &&kann mit ersetzt werden ; aa, was zwar immer noch nicht perfekt ist viel prägnanter.

cls && build

wird

cls; aa build

1
Gibt es einen nicht-stilistischen Grund, warum Sie verwenden args[0]und nicht function aa ($cmd)?
Ruffin

Dies ist eine spröde Methode, um Befehle aufzurufen. Verwenden Sie Skriptblöcke , um Befehle weiterzugeben, und rufen Sie diese mit .not auf &, da letztere einen untergeordneten Gültigkeitsbereich für Variablen erstellen.
mklement0
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.