2011-11-11 28 views
175

Làm cách nào để phủ nhận thử nghiệm có điều kiện trong PowerShell?Làm cách nào để phủ nhận điều kiện trong PowerShell?

Ví dụ, nếu tôi muốn kiểm tra thư mục C: \ Mã, 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, ví dụ (Phi lao):

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" 
} 

này hoạt động tốt, nhưng tôi muốn một cái gì đó inline.

Trả lời

323

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)){}

Chỉ cần cho vui, bạn cũng có thể sử dụng Bitwise độc ​​quyền hay, mặc dù nó không phải là dễ đọc nhất/phương pháp dễ hiểu.

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

Thú vị, vì vậy '-not' đi kèm với giải pháp thay thế truyền thống của '!' 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' và' -ne' không? –

+6

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

+6

Cảm ơn, tôi đã thiếu thực tế rằng việc sử dụng các dấu ngoặc đơn '!' Bắt buộc. –

8

Nếu bạn đang như tôi và không thích ngoặc kép, bạn có thể sử dụng một hàm

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

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

Example

+0

Tôi thích điều này, nhưng có lẽ không thể sử dụng triển khai 'không' này ở mọi nơi (ví dụ' không kiểm tra đường dẫn - đường dẫn C: \ Code' sẽ không hoạt động). Xem thêm [post] có liên quan này (http://stackoverflow.com/q/31888580/450913). – orad

Các vấn đề liên quan