जवाबों:
हां, आप मूल स्ट्रिंग के खिलाफ प्रतिस्थापन और जांच का उपयोग कर सकते हैं:
if not x%str1:bcd=%==x%str1% echo It contains bcd
%str1:bcd=%
बिट एक का स्थान ले लेगा bcd
में str1
कोई रिक्त स्ट्रिंग के साथ, यह मूल से अलग बना रही है।
यदि मूल bcd
में स्ट्रिंग नहीं है , तो संशोधित संस्करण समान होगा।
निम्नलिखित स्क्रिप्ट के साथ परीक्षण इसे कार्रवाई में दिखाएगा:
@setlocal enableextensions enabledelayedexpansion
@echo off
set str1=%1
if not x%str1:bcd=%==x%str1% echo It contains bcd
endlocal
और विभिन्न रन के परिणाम:
c:\testarea> testprog hello
c:\testarea> testprog abcdef
It contains bcd
c:\testarea> testprog bcd
It contains bcd
नोटों की एक जोड़ी:
if
बयान इस समाधान का मांस है, बाकी सब समर्थन सामान है।x
समानता के दो पहलू से पहले यह सुनिश्चित करें कि स्ट्रिंग है bcd
ठीक काम करता है। यह कुछ "अनुचित" शुरुआती पात्रों से भी बचाता है।आप स्रोत स्ट्रिंग को पाइप कर सकते हैं findstr
और यह देखने के लिए मान को ERRORLEVEL
देख सकते हैं कि क्या पैटर्न स्ट्रिंग पाया गया था। शून्य का मान सफलता को इंगित करता है और पैटर्न पाया गया था। यहाँ एक उदाहरण है:
::
: Y.CMD - Test if pattern in string
: P1 - the pattern
: P2 - the string to check
::
@echo off
echo.%2 | findstr /C:"%1" 1>nul
if errorlevel 1 (
echo. got one - pattern not found
) ELSE (
echo. got zero - found pattern
)
जब इसे CMD.EXE में चलाया जाता है, तो हमें यह मिलता है:
C:\DemoDev>y pqrs "abc def pqr 123"
got one - pattern not found
C:\DemoDev>y pqr "abc def pqr 123"
got zero - found pattern
मैं आमतौर पर ऐसा कुछ करता हूं:
Echo.%1 | findstr /C:"%2">nul && (
REM TRUE
) || (
REM FALSE
)
उदाहरण:
Echo.Hello world | findstr /C:"world">nul && (
Echo.TRUE
) || (
Echo.FALSE
)
Echo.Hello world | findstr /C:"World">nul && (Echo.TRUE) || (Echo.FALSE)
आउटपुट:
TRUE
FALSE
मुझे नहीं पता कि यह सबसे अच्छा तरीका है।
अनुकूलता और उपयोग में आसानी के लिए ऐसा करने के लिए अक्सर FIND का उपयोग करना बेहतर होता है।
आपको इस बात पर भी विचार करना चाहिए कि क्या आप मामले को संवेदनशील तरीके से मैच करना चाहते हैं या असंवेदनशील तरीके से।
78 अंकों के साथ विधि (मेरा मानना है कि मैं paxdiablo के पद का उल्लेख कर रहा था) केवल केस सेंसिटिव रूप से मेल खाएगी, इसलिए आपको हर संभावित पुनरावृत्ति के लिए हर मामले की भिन्नता के लिए एक अलग जांच डालनी होगी जिसे आप मैच करना चाहते हैं।
(क्या दर्द है? चेक को पूरा करने के लिए केवल 3 अक्षरों का मतलब है कि 9 अलग-अलग परीक्षण!)
इसके अलावा, कई बार कमांड आउटपुट, लूप में एक वैरिएबल, या आपके बैच / सीएमडी में एक पॉइंटर वैरिएबल के मान का मिलान करना बेहतर होता है, जो सीधे आगे नहीं होता है।
इन कारणों से यह एक बेहतर वैकल्पिक पद्धति है:
का प्रयोग करें: [/ I] [/ V] "वर्ण से मिलान करने के लिए" खोजें
[/ I] (असंवेदनशील मामला) [/ V] (पात्रों को शामिल नहीं करना चाहिए)
सिंगल लाइन के रूप में:
ECHO.%Variable% | FIND /I "ABC">Nul && ( Echo.Found "ABC" ) || ( Echo.Did not find "ABC" )
बहु-रेखा:
ECHO.%Variable%| FIND /I "ABC">Nul && (
Echo.Found "ABC"
) || (
Echo.Did not find "ABC"
)
जैसा कि उल्लेख किया गया है कि यह उन चीजों के लिए बहुत अच्छा है जो चर में नहीं हैं जो स्ट्रिंग प्रतिस्थापन की अनुमति देते हैं:
FOR %A IN (
"Some long string with Spaces does not contain the expected string"
oihu AljB
lojkAbCk
Something_Else
"Going to evaluate this entire string for ABC as well!"
) DO (
ECHO.%~A| FIND /I "ABC">Nul && (
Echo.Found "ABC" in "%A"
) || ( Echo.Did not find "ABC" )
)
Output From a command:
NLTest | FIND /I "ABC">Nul && ( Echo.Found "ABC" ) || ( Echo.Did not find "ABC" )
As you can see this is the superior way to handle the check for multiple reasons.
setlocal EnableExtensions
तो IF /I
केस संवेदी तुलना करने के लिए।
यदि आप उपस्थिति का पता लगा रहे हैं, तो यहां सबसे आसान उपाय है:
SET STRING=F00BAH
SET SUBSTRING=F00
ECHO %STRING% | FINDSTR /C:"%SUBSTRING%" >nul & IF ERRORLEVEL 1 (ECHO CASE TRUE) else (ECHO CASE FALSE)
यह बूलियन चर में विंडोज़ कमांड के आउटपुट को छोड़ने के लिए बहुत अच्छा काम करता है। आप जिस आदेश को चलाना चाहते हैं, उसके साथ प्रतिध्वनि बदलें। आप पाइप का उपयोग करके एक बयान को और अधिक योग्य बनाने के लिए फाइंडस्ट्रा के एक साथ स्ट्रिंग कर सकते हैं। सेवा नियंत्रण के लिए उदा (SC.exe)
SC QUERY WUAUSERV | findstr /C:"STATE" | FINDSTR /C:"RUNNING" & IF ERRORLEVEL 1 (ECHO case True) else (ECHO CASE FALSE)
यह एक विंडोज़ अपडेट सेवाओं के लिए एससी क्वेरी के आउटपुट का मूल्यांकन करता है, जो एक बहु-पाठ के रूप में सामने आता है, "स्टेट" वाली लाइन को ढूंढता है, फिर पाता है कि क्या शब्द "रनिंग" उस लाइन पर होता है, और तदनुसार त्रुटिवली सेट करता है।
SET STRING=abcdefgh SET SUBSTRING=bcd ECHO %STRING% | FINDSTR /C:"%SUBSTRING%" >nul & IF ERRORLEVEL 1 (ECHO CASE FALSE) else (ECHO CASE TRUE)
मैं शायद इस उत्तर के साथ बहुत देर से आ रहा हूं, लेकिन स्वीकृत उत्तर केवल यह जांचने के लिए काम करता है कि "हार्ड-कोडेड स्ट्रिंग" खोज स्ट्रिंग का एक हिस्सा है या नहीं।
गतिशील खोज के लिए, आपको यह करना होगा:
SET searchString=abcd1234
SET key=cd123
CALL SET keyRemoved=%%searchString:%key%=%%
IF NOT "x%keyRemoved%"=="x%searchString%" (
ECHO Contains.
)
नोट: आप दो चर को तर्क के रूप में ले सकते हैं।
बेहतर जवाब यहाँ था :
set "i=hello " world"
set i|find """" >nul && echo contains || echo not_contains
ECHO %String%| FINDSTR /C:"%Substring%" && (Instructions)
एक विकल्प के लिए एक फ़ाइल की खोज करने वाले समाधान भी एक स्ट्रिंग खोज सकते हैं , जैसे। find
या findstr
।
आपके मामले में, आसान समाधान यह होगा कि आप एक फ़ाइल नाम जैसे की आपूर्ति के बजाय कमांड में एक स्ट्रिंग को पाइप करें।
मामले के प्रति संवेदनशील स्ट्रिंग:
echo "abcdefg" | find "bcd"
स्ट्रिंग के मामले को अनदेखा करें:
echo "abcdefg" | find /I "bcd"
यदि कोई मैच नहीं मिला, तो आपको CMD और खाली ERRORLEVEL% 1 पर एक रिक्त पंक्ति प्रतिसाद मिलेगा
Windows
औरcmd
या यह हैms-dos
। MSDOS लंबे समय तक विंडोज का हिस्सा नहीं रहा है ।