दिलचस्प पोस्ट
संग्रहीत कार्यविधि जो डेटा को सीएसवी फ़ाइलों में निर्यात करती है केवल एक फ़ाइल में निर्यात करती है कैसे स्थानीय रूप से फेसबुक कनेक्ट का परीक्षण करें कैसे jQuery का उपयोग कर पेज की स्क्रॉल स्थिति का पता लगाने के लिए जावा में दो एक्सएमएल फ़ाइलें मर्ज करें ट्रिगर करने वाला ईवेंट जब बटन को एंड्रॉइड में दबाया जाता है OOP विरासत और डिफ़ॉल्ट कन्स्ट्रक्टर किसी सूची के अंदर एक शब्दकोश कुंजी मान कैसे पहुंचें? MySQL कहां में () किटकैट की हत्या: स्थानीय संसाधन लोड करने की अनुमति नहीं है: file: ///android_asset/webkit/android-weberror.png सी # में वाष्पशील खोजशब्द का उपयोग स्पष्ट करना Share_ptr के साथ स्मृति रिसाव से कैसे बचें? फ़्लोटिंग पॉइंट नंबर को ठीक करना विजुअल स्टूडियो 2013 एएसपी.नेट पहचान का उपयोग करते समय मैं टेबल नाम कैसे बदल सकता हूं? कार्यों का सदस्य कार्य होना चाहिए? जावा में, मैं कैसे जांचूं अगर कोई स्ट्रिंग में कोई सबस्ट्रिंग है (मामले की अनदेखी)?

क्यों नहीं कई FINDSTR उदाहरण के साथ कई शाब्दिक खोज तार एक मैच मिल रहा है?

निम्न FINDSTR उदाहरण एक मैच को खोजने में विफल रहता है।

echo ffffaaa|findstr /l "ffffaaa faffaffddd" 

क्यूं कर?

Solutions Collecting From Web of "क्यों नहीं कई FINDSTR उदाहरण के साथ कई शाब्दिक खोज तार एक मैच मिल रहा है?"

उपयुक्त रूप से यह लंबे समय से FINDSTR बग है। मुझे लगता है कि परिस्थितियों के आधार पर यह एक गंभीर बग हो सकता है

मैंने पुष्टि की है कि कमांड दो अलग विस्टा मशीनों, एक विंडोज 7 मशीन और एक एक्सपी मशीन पर विफल हो जाती है। मैं इस findstr मिला – टूटा ??? लिंक जो समान खोज की रिपोर्ट करता है Windows Server 2003 पर विफल रहता है, लेकिन यह Windows 2000 पर सफल होता है

मैंने कई प्रयोग किए हैं और ऐसा लगता है कि निम्न स्थितियों को विफलता की संभावना के लिए पूरा किया जाना चाहिए:

  • खोज कई शाब्दिक खोज तारों का उपयोग कर रहा है
  • खोज स्ट्रिंग विभिन्न लंबाई के हैं
  • एक छोटी खोज स्ट्रिंग में लंबी खोज स्ट्रिंग के साथ कुछ ओवरलैप होते हैं
  • खोज केस संवेदनशील है (कोई भी नहीं /I विकल्प)

हर विफलता में मैंने देखा है, यह हमेशा कम खोज तारों में से एक है जो विफल हो जाता है।

इससे कोई फर्क नहीं पड़ता कि खोज स्ट्रिंग्स को निर्दिष्ट कैसे किया जाता है। एक ही दोषपूर्ण परिणाम कई /C:"search" विकल्पों के साथ और /G:file विकल्प के साथ भी हासिल किया जाता है।

केवल 3 समाधान के साथ आने में सक्षम हैं:

  • यदि आप मामले की परवाह नहीं करते तो /I विकल्प का उपयोग करें जाहिर है यह आपकी ज़रूरतों को पूरा नहीं कर सकता है

  • /R नियमित अभिव्यक्ति विकल्प का उपयोग करें। लेकिन अगर आप ऐसा करते हैं तो आपको यह सुनिश्चित करना होगा कि आप खोज में किसी भी मेटा-वर्ण को छोड़ दें ताकि यह एक शाब्दिक खोज की अपेक्षा परिणाम से मेल खा सके। यह समस्याग्रस्त भी हो सकता है

  • यदि आप /V विकल्प का उपयोग कर रहे हैं, तो एकाधिक खोजों के साथ एक FINDSTR के स्थान पर प्रत्येक खोज स्ट्रिंग के साथ एकाधिक पाइप किए गए FINDSTR आदेशों का उपयोग करें। यह भी एक समस्या हो सकती है यदि आपके पास बहुत सारे खोज स्ट्रिंग हैं जिसके लिए आप /G:file विकल्प का उपयोग करना चाहते हैं।

मैं इस बग से नफरत है !!!!

नोट – देखें Windows FINDSTR कमांड की अनुपयुक्त सुविधाओं और सीमाएं क्या हैं? FINDSTR की एक विस्तृत सूची के लिए स्वतंत्र व्यक्तियों

मैं यह नहीं बता सकता कि findstr कई शाब्दिक तारों के साथ क्यों विफल हो सकता है हालांकि, मैं उस कष्टप्रद बग के आसपास काम करने के लिए एक विधि प्रदान कर सकता हूँ।

यह देखते हुए कि शाब्दिक खोज स्ट्रिंग्स को search_strings.txt नामक एक पाठ फ़ाइल में सूचीबद्ध किया गया है …:

 ffffaaa faffaffddd 

…, आप प्रत्येक एकल वर्ण के सामने एक बैकस्लैश डालने से इसे नियमित अभिव्यक्ति में परिवर्तित कर सकते हैं:

 @echo off setlocal EnableExtensions DisableDelayedExpansion > "regular_expressions.txt" ( for /F usebackq^ delims^=^ eol^= %%S in ("search_strings.txt") do ( set "REGEX=" & set "STRING=%%S" for /F delims^=^ eol^= %%T in (' cmd /U /V /C echo(!STRING!^| find /V "" ') do ( set "ESCCHR=\%%T" if "%%T"="<" (set "ESCCHR=%%T") else if "%%T"=">" (set "ESCCHR=%%T") setlocal EnableDelayedExpansion for /F "delims=" %%U in ("REGEX=!REGEX!!ESCCHR!") do ( endlocal & set "%%U" ) ) setlocal EnableDelayedExpansion echo(!REGEX! endlocal ) ) endlocal 

फिर परिवर्तित फ़ाइल regular_expressions.txt उपयोग करें …:

 \f\f\f\f\a\a\a \f\a\f\f\a\f\f\d\d\d 

… एक नियमित अभिव्यक्ति खोज करने के लिए, जो कई खोज तारों के साथ भी ठीक काम करता है:

 echo ffffaaa| findstr /R /G:"regular_expressions.txt" 

पूर्ववर्ती बैकस्लैश केवल उन प्रत्येक चरित्र से बचते हैं जिनमें नियमित अभिव्यक्ति खोजों में विशेष अर्थ है।

शब्द सीमाओं से टकराव से बचने के लिए अक्षर < और > को बचने से बाहर रखा गया है, जो कि \< और \> शुरुआत से और एक खोज स्ट्रिंग के अंत में दिखाई देते हैं, क्रमशः।

चूंकि नियमित एक्सप्रेशन विंडोज 8 के पिछले संस्करणों के लिए 255 वर्णों तक सीमित हैं, इसलिए मूल खोज स्ट्रिंग की लंबाई 127 वर्णों तक सीमित है, क्योंकि प्रत्येक ऐसे वर्ण को दो वर्णों द्वारा व्यक्त किया जाता है पलायन के कारण


यहां एक वैकल्पिक दृष्टिकोण है जो केवल मेटा-वर्णों को बचाता है . , * , ^ , $ , [ , ] , \ , " :

 @echo off setlocal EnableExtensions DisableDelayedExpansion set "_META=.*^$[]\"^" & rem (including `"`) > "regular_expressions.txt" ( for /F usebackq^ delims^=^ eol^= %%S in ("search_strings.txt") do ( set "REGEX=" & set "STRING=%%S" for /F delims^=^ eol^= %%T in (' cmd /U /V /C echo(!STRING!^| find /V "" ') do ( set "CHR=%%T" setlocal EnableDelayedExpansion if not "!_META!"=="!_META:*%%T=!" set "CHR=\!CHR!" for /F "delims=" %%U in ("REGEX=!REGEX!!CHR!") do ( endlocal & set "%%U" ) ) setlocal EnableDelayedExpansion echo(!REGEX! endlocal ) ) endlocal 

इस पद्धति का लाभ यह है कि खोज स्ट्रिंग की लंबाई अब 127 वर्णों तक सीमित नहीं है, लेकिन प्रत्येक उत्पन्न होने वाली उपर्युक्त मेटा-वर्ण के लिए 254 वर्ण शून्य से 1, Windows XP के पिछले संस्करणों के लिए findstr संस्करणों के लिए आवेदन करना।


यहां एक और काम है- पहले स्थान पर findstr साथ केस-असंवेदनशील खोज का उपयोग करके, फिर मामले-संवेदनशील तुलना करके परिणाम को छानने के बाद:

 echo ffffaaa|findstr /L /I "ffffaaa faffaffddd"|cmd /V /C set /P STR=""^&if @^^!STR^^!==@^^!STR:ffffaaa=ffffaaa^^! (echo(^^!STR^^!) else if @^^!STR^^!==@^^!STR:faffaffddd=faffaffddd^^! (echo(^^!STR^^!) 

डबल-एस्केप्ड विस्मयादिबोधक चिह्न सुनिश्चित करता है कि चर STR स्पष्ट रूप से लागू cmd उदाहरण में विस्तारित हो गया है, भले ही होस्टिंग cmd इंस्टेंस में देरी से विस्तार सक्षम हो।


वैसे, जो मैं एक डिजाइन दोष को कॉल करता हूं, findstr का इस्तेमाल करते हुए शाब्दिक स्ट्रिंग्स की खोज करते हैं, जैसे कि वे बैकस्लैश होते हैं, क्योंकि इन्हें मेटा-वर्णों के बाद भी बचने के लिए उपयोग किया जा सकता है, हालांकि आवश्यक नहीं है; उदाहरण के लिए, खोज स्ट्रिंग \. वास्तव में मैच ; वास्तव में मिलान करने के लिए \. सचमुच, आपको खोज स्ट्रिंग निर्दिष्ट करना होगा \\. । मुझे समझ में नहीं आ रहा है कि क्यों मेटा-वर्ण अभी भी वास्तविक खोज करते समय पहचाने जाते हैं, यह वही नहीं है जो मैं शाब्दिक कहता हूं।