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.