बैच न के बराबर (असमानता) ऑपरेटर


263

के अनुसार इस , !==!नहीं-बराबर स्ट्रिंग ऑपरेटर है। यह कोशिश करते हुए, मुझे मिलता है:

C:\> if "asdf" !==! "fdas" echo asdf
!==! was unexpected at this time.

मैं क्या गलत कर रहा हूं?

जवाबों:



105

इसके बजाय NEQ का उपयोग करें।

if "asdf" NEQ "fdas" echo asdf

37
इसे चालू करने के लिए कमांड एक्सटेंशन की आवश्यकता होती है (वे डिफ़ॉल्ट रूप से 2000+ पर होते हैं, लेकिन सिस्टम वाइड या cmd.exe के पैरामीटर के रूप में बंद किए जा सकते हैं) आम तौर पर आपको उन्हें सेट्लोकल के साथ चालू करना चाहिए, लेकिन समान परीक्षण नहीं होने पर एक सरल के लिए, बस "अगर नहीं" का उपयोग करें, यह अच्छे पुराने डॉस दिनों में वापस चला जाता है
एंडर्स

29

मुझे पता है कि यह काफी पुराना है, लेकिन पार्टी में देर से आने वालों के लिए यह उपयोगी हो सकता है। (EDIT: चूंकि यह अभी भी ट्रैफ़िक प्राप्त करता है और @Goozak ने टिप्पणियों में बताया है कि मेरे नमूने का मूल विश्लेषण गलत था।)

मैंने आपके लिंक में उदाहरण कोड से इसे खींच लिया है:

IF !%1==! GOTO VIEWDATA
REM  IF NO COMMAND-LINE ARG...
FIND "%1" C:\BOZO\BOOKLIST.TXT
GOTO EXIT0
REM  PRINT LINE WITH STRING MATCH, THEN EXIT.

:VIEWDATA
TYPE C:\BOZO\BOOKLIST.TXT | MORE
REM  SHOW ENTIRE FILE, 1 PAGE AT A TIME.

:EXIT0

!%1==!बस ==यह सत्यापित करने का इरादा का एक मुहावरेदार उपयोग है कि बाईं ओर की चीज़, जिसमें आपका चर शामिल है, दाईं ओर की चीज़ से अलग है, जो नहीं है। !इस मामले में सिर्फ एक चरित्र प्लेसहोल्डर है। यह कुछ भी हो सकता है। यदि %1सामग्री है, तो समानता, झूठी हो सकता है अगर यह तुम सिर्फ की तुलना हो जाएगा नहीं है !करने के लिए !और क्या यह सच हो जाएगा।

!==!एक ऑपरेटर नहीं है, इसलिए लेखन "asdf" !==! "fdas"बहुत बकवास है।

उपयोग करने का सुझाव if not "asdf" == "fdas"निश्चित रूप से जाने का रास्ता है।


धन्यवाद jatrim .. सबसे निश्चित रूप से एक जवाब के लिए खोज करने वालों के लिए उपयोगी है, बजाय सवाल फिर से पूछने के लिए। यह StackExchange ताले की तरह नहीं है जो सवालों की उम्र के कारण उत्तर देने / टिप्पणी करने की क्षमता को बंद कर देता है, इसलिए यह पूरी तरह से स्वीकार्य है।
user66001

4
!मामले में यहां इस्तेमाल किया जाता है %1खाली है, इस प्रकार की परीक्षा में जिसके परिणामस्वरूप है !==!, जो सच है। आप %1.==.इसके बजाय उपयोग कर सकते हैं (लगभग कोई भी चरित्र करेगा) - यह सुनिश्चित करने के लिए कि समानता परीक्षण के दोनों पक्षों के पास परीक्षण करने के लिए कुछ है। !==!अंकन निश्चित रूप से है नहीं एक नहीं के बराबर के चिह्न। के साथ बेहतर छड़ी if not ...
गोजक

22

प्रयत्न:

if not "asdf" == "fdas" echo asdf

विंडोज एक्सपी पर मेरे लिए यह काम करता है (मुझे आपके द्वारा पोस्ट किए गए कोड के समान त्रुटि मिलती है)।


4

NEQ का उपयोग आमतौर पर संख्याओं के लिए किया जाता है और == आमतौर पर स्ट्रिंग तुलना के लिए उपयोग किया जाता है।

मुझे कोई भी दस्तावेज नहीं मिल रहा है जो स्ट्रिंग तुलना (NEQ के स्थान पर) के लिए एक विशिष्ट और समकक्ष असमानता का उल्लेख करता है। IF NOT == का उपयोग करने वाला समाधान सबसे अधिक ध्वनि दृष्टिकोण लगता है। मैं तुरंत ऐसी परिस्थिति के बारे में नहीं सोच सकता जिसमें बैच फ़ाइल में संचालन का मूल्यांकन, IF NOT == तुलना पद्धति को स्ट्रिंग्स पर लागू करते समय किसी समस्या या अप्रत्याशित व्यवहार का कारण बन जाए।

काश, मैं इस बात की जानकारी दे पाता कि दोनों कार्य कैसे निचले स्तर पर अलग-अलग व्यवहार करते हैं - अलग-अलग बैच फ़ाइलों को डिसाइड करते हुए (जो NEQ और IF NOT == का उपयोग करते हैं) किसी भी सुराग की पेशकश करते हैं जिसके संदर्भ में (अनौपचारिक रूप से प्रलेखित) देशी कॉल conhost.exe उपयोग कर रहा है?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.