PowerShellで条件を否定するにはどうすればよいですか?


274

PowerShellで条件テストを無効にするにはどうすればよいですか?

たとえば、C:\ Codeディレクトリを確認するには、次のコマンドを実行します。

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

その状態を無効にする方法はありますか、例えば(非稼働):

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

回避策

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

これは問題なく動作しますが、インラインのものを使用します。

回答:


508

あなたはほとんどそれを持っていましたNot。そのはず:

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

あなたも使うことができます!if (!(Test-Path C:\Code)){}

楽しみのために、ビット単位の排他的またはを使用することもできますが、これは最も読みやすく理解しやすい方法ではありません。

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

2
興味深いので-not、その時の伝統的な代替案が付属してい!ますか?私は何とかのための伝統的な選択肢を得ることができます-eqし、-neあまりにも?
Roman Starkov

8
いいえ、これ-notは代替に付属する唯一の論理演算子であり(を参照help about_Logical_Operators)、演算子にエイリアスを設定することはできません。
Rynant

14
おかげで、!必要な括弧の使用という事実を見逃しました。
Holistic Developer

@ Holistic-Developer !自体には括弧は必要ありません。少なくともPS3ではできません。
Llyle、2015年

9
「!Test-Path」という用語は、コマンドレットの名前として認識されません... :)
sodawillow

9

あなたが私のようで、二重括弧が嫌いなら、関数を使うことができます

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

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


1
私はこれが好きですが、おそらくこのnot実装をどこでも使用することはできません(たとえば、機能しnot Test-Path -path C:\Codeません)。この関連記事も参照してください。
orad

2
Perlには、バルカンの意味で、より論理的なイディオムがあります。ヴァルカンの半分なので、私はそれを好み、それを関数としてC#とマクロとしてCおよびC ++の両方に実装しました。
デビッドA.グレイ

1
@ DavidA.Gray Rubyにはunlessキーワード(と同様if)がありますが、他の言語のほとんどのユーザーはそれを嫌っています。
フランクリンYu

3

PowershellはC / C ++ / C * not演算子も受け入れます

if(!(Test-Path C:\ Code)){「存在しません!」}

私はC *に慣れているので、よく使用します...
コードの圧縮/単純化を可能にします...
また、よりエレガントだと思います...


0

二重括弧が気に入らない場合、または関数を記述したくない場合は、変数を使用できます。

$path = Test-Path C:\Code
if (!$path) {
    write "it doesn't exist!"
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.