Làm cách nào để tôi phủ nhận một điều kiện trong PowerShell?


272

Làm cách nào để tôi phủ nhận bài kiểm tra có điều kiện trong PowerShell?

Ví dụ: nếu tôi muốn kiểm tra thư mục C: \ Code, tôi có thể chạy:

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

Có cách nào để phủ nhận điều kiện đó, vd (không làm việc):

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

Cách giải quyết :

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

Điều này hoạt động tốt, nhưng tôi thích một cái gì đó nội tuyến.

Câu trả lời:


508

Bạn gần như đã có nó với Not. Nó nên là:

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

Bạn cũng có thể sử dụng !:if (!(Test-Path C:\Code)){}

Để giải trí, bạn cũng có thể sử dụng độc quyền bitwise hoặc mặc dù đó không phải là phương pháp dễ đọc / dễ hiểu nhất.

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

2
Thú vị, vậy -notđi kèm với sự thay thế truyền thống !sau đó? Tôi có thể bằng cách nào đó có được các lựa chọn thay thế truyền thống cho -eq-nequá?
Roman Starkov

8
Không, -notlà toán tử logic duy nhất đi kèm với một thay thế (xem help about_Logical_Operators) và các toán tử không thể được đặt bí danh.
Rynant

14
Cảm ơn, tôi đã thiếu thực tế là việc sử dụng !dấu ngoặc đơn cần thiết.
Nhà phát triển toàn diện

@ Holistic - Nhà phát triển !tự nó không yêu cầu dấu ngoặc đơn. Ít nhất là không có trong PS3.
Llyle

9
Thuật ngữ '! Đường dẫn thử nghiệm' không được công nhận là tên của một lệnh ghép ngắn ... :)
sodawvel

9

Nếu bạn giống tôi và không thích dấu ngoặc kép, bạn có thể sử dụng hàm

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

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

Thí dụ


1
Tôi thích điều này, nhưng có lẽ không thể sử dụng nottriển khai này ở mọi nơi (ví dụ như not Test-Path -path C:\Codesẽ không hoạt động). Xem thêm liên quan này bài .
orad

2
Perl có một logic hơn, theo nghĩa Vulcan, thành ngữ, được gọi là Unless, được viết dưới dạng hàm. Là một nửa Vulcan, tôi thích nó và đã triển khai nó trong cả C #, dưới dạng hàm và trong C và C ++, dưới dạng macro.
David A. Gray

1
@ DavidA.Gray Ruby có unlesstừ khóa (giống như if) nhưng hầu hết người dùng từ các ngôn ngữ khác đều ghét nó.
Franklin Yu

3

Powershell cũng chấp nhận toán tử C / C ++ / C * không

if (! (Đường dẫn thử nghiệm C: \ Code)) {ghi "nó không tồn tại!" }

Tôi sử dụng nó thường xuyên vì tôi đã quen với C * ...
cho phép nén / đơn giản hóa mã ...
Tôi cũng thấy nó thanh lịch hơn ...


0

nếu bạn không thích dấu ngoặc kép hoặc bạn không muốn viết hàm, bạn chỉ có thể sử dụng một biến.

$path = Test-Path C:\Code
if (!$path) {
    write "it doesn't exist!"
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.