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?



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}


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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.