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?

Iszi
quelle
3
Dies könnte helfen: Was sind die PowerShell-Entsprechungen von Bashs && und || Betreiber?
Gilles 'SO - hör auf, böse zu sein'
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}

SS4Soku
quelle
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
moppled
quelle
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