PowerShell'de bir durumu nasıl reddederim?


274

PowerShell'de koşullu bir testi nasıl reddederim?

Örneğin, C: \ Code dizinini kontrol etmek istersem, çalıştırabilirim:

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

Bu durumu reddetmenin bir yolu var mı, örneğin (çalışmayan):

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

Geçici çözüm :

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

Bu iyi çalışıyor, ancak satır içi bir şey tercih ederim.

Yanıtlar:


508

Neredeyse bitirdin Not. Olmalı:

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

Ayrıca şunları kullanabilirsiniz !:if (!(Test-Path C:\Code)){}

Sadece eğlence için, bitwise exclusive'yi veya en okunabilir / anlaşılabilir yöntem olmasa da kullanabilirsiniz.

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

2
İlginç, -notgeleneksel alternatifi ile geliyor! ? Ben bir şekilde geleneksel alternatifleri alabilir miyim -eqve -nede mi?
Roman Starkov

8
Hayır, -not alternatif (bkz. help about_Logical_Operators) İle gelen tek mantıksal işleçtir ve işleçler diğer adlara eklenemez.
Rynant

14
Teşekkürler, !gerekli parantez kullanımı gerçeğini eksikti .
Holistik Geliştirici

@ Holistic-Developer'ın !kendisi parantez gerektirmez. En azından PS3'te değil.
Llyle

9
'! Test-Path' terimi bir cmdlet'in adı olarak tanınmıyor ... :)
sodawillow

9

Benim gibiyseniz ve çift parantezden hoşlanmıyorsanız, bir işlev kullanabilirsiniz

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

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

Misal


1
Bunu beğendim, ancak muhtemelen bu notuygulamayı her yerde kullanamıyorum (örneğin not Test-Path -path C:\Codeişe yaramaz). Bu ilgili gönderiye de bakınız .
orad

2
Perl, Vulcan anlamında, fonksiyon olarak yazılan Unless adında daha mantıklıdır. Yarı Vulcan olarak bunu tercih ediyorum ve hem C # 'da, hem fonksiyon olarak hem de C ve C ++' da makro olarak uyguladım.
David A. Gray

1
@ DavidA.Gray Ruby unlessanahtar kelimeye sahiptir (tıpkı gibi if), ancak diğer dillerdeki çoğu kullanıcı bundan nefret eder.
Franklin Yu

3

Powershell ayrıca C / C ++ / C * operatörünü kabul etmez

if (! (Test-Path C: \ Code)) {"mevcut değil!" }

Sık sık kullanıyorum çünkü C * ...
kod sıkıştırma / basitleştirmeye izin
veriyorum ... Ayrıca daha zarif buluyorum ...


0

çift ​​parantezleri beğenmediyseniz veya bir işlev yazmak istemiyorsanız, sadece bir değişken kullanabilirsiniz.

$path = Test-Path C:\Code
if (!$path) {
    write "it doesn't exist!"
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.