Remplacements pour esperluette et double esperluette dans PowerShell

28

Dans le processeur CMD natif de Windows, vous pouvez utiliser &pour enchaîner des commandes afin que l'une s'exécute immédiatement après l'autre. A &&exécutera la deuxième commande uniquement si la première se termine sans erreur.

Ceci est différent des commandes de tuyauterie avec le fait |que la sortie de la première commande n'est pas envoyée à la deuxième commande, les commandes sont simplement exécutées l'une après l'autre et la sortie pour chacune est envoyée à sa place habituelle.

Cependant, j'obtiens une erreur lorsque j'essaie d'utiliser &ou &&dans PowerShell. Des fonctions similaires sont-elles disponibles dans PowerShell, ou cette fonctionnalité est-elle obsolète?

Iszi
la source
3
Cela pourrait aider: Quels sont les équivalents PowerShell de B&'s && et || les opérateurs?
Gilles 'SO- arrête d'être méchant'
Une question intéressante est de savoir si la métaprogrammation de powershell pourrait être utilisée pour fournir cette fonctionnalité en utilisant&&
soandos

Réponses:

35

L' &opérateur dans PowerShell est simplement le ;ou point-virgule.

L' &&opérateur dans PowerShell doit être exécuté comme une ifinstruction.

Command ; if($?) {Command}

SS4Soku
la source
1

Essayez cette fonction, qui peut être utilisée à peu près de la même manière:

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

Maintenant, &&peut être remplacé par ; aa, qui, bien qu'il ne soit pas parfait, est beaucoup plus succinct.

cls && build

devient

cls; aa build
tordu
la source
1
Une raison non stylistique pour laquelle vous utilisez args[0]et non function aa ($cmd)?
ruffin
C'est une manière fragile d'appeler des commandes; utiliser des blocs de script pour passer des commandes autour, et invoquer ceux qui ., non &, parce que ce dernier crée un champ d'enfant pour les variables.
mklement0