ฉันจะปฏิเสธเงื่อนไขใน 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)){}

เพื่อความสนุกคุณสามารถใช้ bitwise exclusive หรือแม้ว่าจะไม่ใช่วิธีที่อ่าน / เข้าใจได้มากที่สุด

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
คำว่า '! Test-Path' ไม่เป็นที่รู้จักในชื่อของ 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 มีเหตุผลมากขึ้นในความรู้สึกของวัลแคนสำนวนที่เรียกว่ายกเว้นถ้าเขียนเป็นฟังก์ชั่น ฉันชอบมันและได้นำไปใช้ในทั้ง C #, เป็นฟังก์ชั่นและใน C และ C ++ เป็นมาโคร
David A. Gray

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.