379 votes

Comment annuler une condition dans PowerShell ?

Comment annuler un test conditionnel dans PowerShell ?

Par exemple, si je veux vérifier le répertoire C:\Code Je peux courir :

if (Test-Path C:\Code){
  write "it exists!"
}

Existe-t-il un moyen de nier cette condition, par exemple (non-fonctionnement) :

if (Not (Test-Path C:\Code)){
  write "it doesn't exist!"
}

Solution de rechange :

if (Test-Path C:\Code){
}
else {
  write "it doesn't exist"
}

Cela fonctionne bien, mais je préférerais quelque chose en ligne.

683voto

Rynant Points 6575

Vous l'avez presque eu avec Not . Il devrait l'être :

if (-Not (Test-Path C:\Code)) {
    write "it doesn't exist!"
} 

Vous pouvez également utiliser ! : if (!(Test-Path C:\Code)){}

Pour le plaisir, vous pouvez également utiliser la méthode bitwise exclusive ou, bien que ce ne soit pas la méthode la plus lisible/compréhensible.

if ((test-path C:\code) -bxor 1) {write "it doesn't exist!"}

17voto

ZEE Points 391

Powershell accepte également l'opérateur C/C++/C* not

si ( !(Test-Path C:\Code ) ){ écrire "il n'existe pas !" }

Je l'utilise souvent car j'ai l'habitude de C*...
permet la compression/simplification du code...
Je le trouve aussi plus élégant...

11voto

Steven Penny Points 18523

Si vous êtes comme moi et que vous n'aimez pas les doubles parenthèses, vous pouvez utiliser une fonction

function not ($cm, $pm) {
  if (& $cm $pm) {0} else {1}
}

if (not Test-Path C:\Code) {'it does not exist!'}

Exemple

10voto

Si vous n'aimez pas les doubles crochets ou si vous ne voulez pas écrire une fonction, vous pouvez simplement utiliser une variable.

$path = Test-Path C:\Code
if (!$path) {
    write "it doesn't exist!"
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X