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 !자체에는 괄호가 필요하지 않습니다. 적어도 PS3에는 없습니다.
Llyle

9
용어 '! 테스트 경로는'... cmdlet의 이름으로 인식되지 않습니다 :)
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은 Vulcan의 의미에서 Unless라고하는 관용구가 더 논리적이며 함수로 작성되었습니다. Vulcan의 절반이기 때문에 나는 그것을 선호하며 C #에서 함수로, C 및 C ++에서 매크로로 구현했습니다.
David A. Grey

1
@ DavidA.Gray Ruby에는 unless키워드 (와 같은 if)가 있지만 다른 언어를 사용하는 대부분의 사용자는이를 싫어합니다.
Franklin Yu

3

Powershell은 또한 C / C ++ / C * 연산자를 허용하지 않습니다

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.