উত্তর:
হ্যাঁ, আপনি বিকল্পগুলি ব্যবহার করতে পারেন এবং মূল স্ট্রিংয়ের বিরুদ্ধে পরীক্ষা করতে পারেন:
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
)
এটি যখন সিএমডি.এক্সইএতে চালিত হয়, আমরা পাই:
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 ব্যবহার করা প্রায়শই ভাল।
আপনি সংবেদনশীলভাবে বা সংবেদনশীলতার সাথে কেসের সাথে মিল রাখতে চান কিনা তাও আপনাকে অবশ্যই বিবেচনা করতে হবে।
Points 78 টি পয়েন্টযুক্ত পদ্ধতি (আমি বিশ্বাস করি যে আমি প্যাক্সিডাবলোর পোস্টের কথা উল্লেখ করছিলাম) কেবল সংবেদনশীলতার সাথে কেসের সাথে মিলবে, সুতরাং আপনি যে প্রতিটি সম্ভাব্য পুনরাবৃত্তিটি মেলাতে পারবেন তার জন্য প্রতিটি ক্ষেত্রে পরিবর্তনের জন্য একটি পৃথক চেক রাখতে হবে।
(কী বেদনা! চেকটি সম্পন্ন করার জন্য মাত্র 3 টি অক্ষরের মানে 9 টি বিভিন্ন পরীক্ষা!)
এছাড়াও, অনেক সময় কমান্ড আউটপুট, একটি লুপের একটি ভেরিয়েবল, বা আপনার ব্যাচ / সিএমডি তে পয়েন্টার ভেরিয়েবলের মান যেটি সরাসরি সোজা হয় না তার সাথে মিলিয়ে যাওয়া ভাল।
এই কারণে এটি একটি বিকল্প বিকল্প পদ্ধতি:
ব্যবহার করুন: [/ 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)
এটি উইন্ডোজ কমান্ডের আউটপুটটিকে বুলিয়ান ভেরিয়েবলের মধ্যে ফেলে দেওয়ার জন্য দুর্দান্ত কাজ করে। আপনি যে কমান্ডটি চালাতে চান তার সাথে প্রতিধ্বনিটি প্রতিস্থাপন করুন। আপনি পাইপ ব্যবহার করে একটি বিবৃতি আরও যোগ্যতার জন্য Findstr এর একসাথে স্ট্রিং করতে পারেন। পরিষেবা নিয়ন্ত্রণের জন্য ইজি (এসসি। এক্সি)
SC QUERY WUAUSERV | findstr /C:"STATE" | FINDSTR /C:"RUNNING" & IF ERRORLEVEL 1 (ECHO case True) else (ECHO CASE FALSE)
এটি একটি উইন্ডোজ আপডেট পরিষেবাদির জন্য এসসি ক্যোয়ারির আউটপুটকে মূল্যায়ন করে যা একাধিক পাঠ্য হিসাবে প্রকাশিত হয়, "স্টেট" যুক্ত লাইনটি খুঁজে পায় তখন সেই লাইনে "চলমান" শব্দটি পাওয়া যায় কিনা এবং তদনুসারে ত্রুটিযুক্ত স্তর সেট করে sets
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"
যদি কোনও মিল না পাওয়া যায়, আপনি সিএমডি-তে একটি ফাঁকা লাইন প্রতিক্রিয়া পাবেন এবং% ERRORLEVEL% 1 এ সেট করেছেন
Windows
এবংcmd
বা এটাms-dos
। এমএসডোস দীর্ঘদিন ধরে উইন্ডোজের অংশ ছিল না ।