मैं PowerShell में किसी शर्त को कैसे नकार सकता हूं?


273

मैं 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भी पारंपरिक विकल्प प्राप्त कर सकते हैं?
रोमन स्टार्कोव

8
नहीं, -notएकमात्र तार्किक ऑपरेटर है जो एक वैकल्पिक (देखें help about_Logical_Operators) के साथ आता है , और ऑपरेटरों को उपनाम नहीं दिया जा सकता है।
रिनैंट

14
धन्यवाद, मैं इस तथ्य को याद कर रहा था कि !आवश्यक कोष्ठक का उपयोग ।
होलिस्टिक डेवलपर

@ समग्र-डेवलपर को !स्वयं को कोष्ठक की आवश्यकता नहीं होती है। कम से कम PS3 में नहीं।
लेलेले

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
पर्ल के पास वल्कन अर्थ में एक अधिक तार्किक है, मुहावरा, जिसे अनलेस कहा जाता है, जिसे एक फ़ंक्शन के रूप में लिखा जाता है। आधा वल्कन होने के नाते, मैं इसे पसंद करता हूं, और इसे C # दोनों में लागू किया है, एक फ़ंक्शन के रूप में, और C और C ++ में, मैक्रो के रूप में।
डेविड ए। ग्रे

1
@ DavidA.Gray रूबी के पास unlessकीवर्ड (जैसा है if) है, लेकिन अन्य भाषाओं के अधिकांश उपयोगकर्ता इससे नफरत करते हैं।
फ्रैंकलिन यू

3

पॉवरशेल C / C ++ / C * को ऑपरेटर नहीं मानते हैं

अगर ((टेस्ट-पाथ सी: \ कोड)) {लिखना "यह मौजूद नहीं है!" }

मैं इसे अक्सर उपयोग करता हूं क्योंकि मैं C * के लिए उपयोग किया जाता हूं ...
कोड संपीड़न / सरलीकरण की अनुमति देता है ...
मुझे यह अधिक सुरुचिपूर्ण भी लगता है ...


0

यदि आपको डबल ब्रैकेट पसंद नहीं है या आप फ़ंक्शन लिखना नहीं चाहते हैं, तो आप बस एक चर का उपयोग कर सकते हैं।

$path = Test-Path C:\Code
if (!$path) {
    write "it doesn't exist!"
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.