উত্তর:
আপনি and
নেস্টেড শর্তগুলির সাথে এটি করতে পারেন :
if %age% geq 2 (
if %age% leq 12 (
set class=child
)
)
বা:
if %age% geq 2 if %age% leq 12 set class=child
আপনি or
একটি পৃথক ভেরিয়েবল দিয়ে করতে পারেন :
set res=F
if %hour% leq 6 set res=T
if %hour% geq 22 set res=T
if "%res%"=="T" (
set state=asleep
)
set res=
বা set res=1
এবং তারপর if defined res
যা একটু টাইপস বিরুদ্ধে আরো জোরালো হয় এবং স্পষ্টভাবে বিলম্বিত সম্প্রসারণ সক্রিয় না করেও ব্লক এমনকি কাজ করে।
IF
বিবৃতি লজিক্যাল অপারেটর সমর্থন করে না ( AND
এবংOR
), ক্যাসকেডিং IF
বিবৃতি একটি অন্তর্নিহিত একত্রে ভুলবেন না।
IF Exist File1.Dat IF Exist File2.Dat GOTO FILE12_EXIST_LABEL
যদি File1.Dat
এবং File1.Dat
উপস্থিত থাকে তবে লেবেলটি ঝাঁপুন FILE12_EXIST_LABEL
।
আরো দেখুন: IF /?
ডি মরগানের আইন কেবল সংযুক্তি ("এবং") এবং অবহেলা ("নয়") ব্যবহার করে বিযুক্তি ("ওআর") কে লজিক্যাল সমতুল্যে রূপান্তর করতে দেয়। এর অর্থ আমরা এক লাইনে বিযুক্তি ("OR") চেইন করতে পারি।
এর অর্থ যদি নাম হয় "ইয়াক্কো" বা "ওয়াক্কো" বা "ডট", তবে "ওয়ার্নার ভাই বা বোন" প্রতিধ্বনি করুন।
set warner=true
if not "%name%"=="Yakko" if not "%name%"=="Wakko" if not "%name%"=="Dot" set warner=false
if "%warner%"=="true" echo Warner brother or sister
এটি প্যাক্সিডিয়াবলোর "ওআর" উদাহরণের আর একটি সংস্করণ, তবে শর্তগুলি এক লাইনে বেঁধে রয়েছে। (নোট যে বিপরীত leq
হয় gtr
, এবং বিপরীত geq
হয় lss
।)
set res=true
if %hour% gtr 6 if %hour% lss 22 set res=false
if "%res%"=="true" set state=asleep
নিম্নলিখিত উদাহরণগুলি কীভাবে একটি ওয়ান স্টেটমেন্ট তৈরি করতে হয় (ভেরিয়েবলগুলি নির্ধারণের জন্য বা কোনও কমান্ডের জন্য প্যারামিটারগুলি সহ ব্যবহৃত হয়) তা দেখায়।
নোটপ্যাড শুরু করতে এবং সিএমডি উইন্ডোটি বন্ধ করতে:
start notepad.exe & exit
ভেরিয়েবল x, y এবং z এর মানগুলিতে সেট করতে যদি ভেরিয়েবল 'a' এর সমান হয় না।
IF "%a%"=="blah" (set x=1) & (set y=2) & (set z=3)
আশা করি এইটি কাজ করবে!
বা সামান্য কৌশলযুক্ত, কিন্তু অত্যধিক না। এখানে একটি উদাহরণ
set var1=%~1
set var2=%~2
::
set or_=
if "%var1%"=="Stack" set or_=true
if "%var2%"=="Overflow" set or_=true
if defined or_ echo Stack OR Overflow
আথুল প্রকাশ (বয়সে 16 বছর) আইএফ বিবৃতিতে শর্ত উপেক্ষা করে কীভাবে একটি ওআর পরীক্ষার বাস্তবায়ন করতে হবে এবং তারপরে ELSE ধারাটি কার্যকর করার প্রয়োজনীয় কোডটি স্থান হিসাবে ব্যবহারের জন্য একটি যৌক্তিক ধারণা দিয়েছেন। আমি নিজেই ভেবেছিলাম যে তবে আরও দুটি ধারা থাকতে হবে যেহেতু তিনি দুটি আইএফ স্টেটমেন্ট ব্যবহার করার পরামর্শ দিচ্ছেন, এবং তাই এক্সিকিউটেড কোডটি দুবার লিখতে হবে । যাইহোক, যদি কোনও জিওটিও প্রয়োজনীয় কোডটি ছাড়তে ব্যবহার করা হয় তবে ELSE ক্লজগুলি লেখার পরিবর্তে কার্যকর করার জন্য কোডটি একবার লিখতে হবে ।
আমি কীভাবে একটি ওআর তৈরি করতে আটুল প্রকাশের নেতিবাচক যুক্তিটি প্রয়োগ করব তার একটি পরীক্ষামূলক উদাহরণ এখানে ।
আমার উদাহরণস্বরূপ, কারও কাছে যদি ট্যাঙ্কের লাইসেন্স থাকে বা তারা তাদের সামরিক পরিষেবা করে তবে তারা ট্যাঙ্ক চালানোর অনুমতি পায় । দুটি প্রম্পটে সত্য বা মিথ্যা লিখুন এবং যুক্তি আপনাকে কোনও ট্যাঙ্ক চালাতে দেয় কিনা তা আপনি দেখতে সক্ষম হবেন।
@ECHO OFF
@SET /p tanklicence=tanklicence:
@SET /p militaryservice=militaryservice:
IF /I NOT %tanklicence%==true IF /I NOT %militaryservice%==true GOTO done
ECHO I am driving a tank with tanklicence set to %tanklicence% and militaryservice set to %militaryservice%
:done
PAUSE
আপনি যদি একটি বিবৃতিতে if
+ AND
/ লিখতে আগ্রহী হন OR
তবে এর কোনও কিছুই নেই। তবে, আপনি এক লাইনে w / o যে কোনও অতিরিক্ত ভেরিয়েবল এবং ডাব্লু / ও ব্লক সদৃশ (একক কমান্ডের জন্য এবং কোড বিভাগ) চান তা অর্জন করতে আপনি / এবং / স্টেটমেন্টগুলির if
সাথে গ্রুপ করতে পারেন :&&
||
(
)
if-else
echo
TRUE
FALSE
@echo off
setlocal
set "A=1" & set "B=2" & call :IF_AND
set "A=1" & set "B=3" & call :IF_AND
set "A=2" & set "B=2" & call :IF_AND
set "A=2" & set "B=3" & call :IF_AND
echo.
set "A=1" & set "B=2" & call :IF_OR
set "A=1" & set "B=3" & call :IF_OR
set "A=2" & set "B=2" & call :IF_OR
set "A=2" & set "B=3" & call :IF_OR
exit /b 0
:IF_OR
( ( if %A% EQU 1 ( type nul>nul ) else type 2>nul ) || ( if %B% EQU 2 ( type nul>nul ) else type 2>nul ) || ( echo.FALSE-& type 2>nul ) ) && echo TRUE+
exit /b 0
:IF_AND
( ( if %A% EQU 1 ( type nul>nul ) else type 2>nul ) && ( if %B% EQU 2 ( type nul>nul ) else type 2>nul ) && echo.TRUE+ ) || echo.FALSE-
exit /b 0
আউটপুট :
TRUE+
FALSE-
FALSE-
FALSE-
TRUE+
TRUE+
TRUE+
FALSE-
কৌশলটি type
কমান্ডটিতে রয়েছে যা ড্রপ / সেট করে errorlevel
এবং পরবর্তী কমান্ডের পথে পরিচালনা করে।
নেগেশন অপারেন্ড চেষ্টা করুন - 'না'!
ঠিক আছে, আপনি যদি নেস্টেড 'যদি ব্যবহার করে' স্টেট স্টেটমেন্টে 'এবং' অপারেশন করতে পারেন তবে 'পূর্ববর্তী উত্তরগুলি দেখুন', তবে আপনি 'যদি না' বা 'অপারেশন করতে' দিয়ে একই জিনিস করতে পারেন।
যদি আপনি এখনও পর্যন্ত ধারণাটি না পেয়ে থাকেন তবে পড়ুন। অন্যথায়, আপনার সময় নষ্ট করবেন না এবং প্রোগ্রামিংয়ে ফিরে আসুন।
যেমন নেস্টেড 'যদি সমস্ত শর্ত সত্য হয় তখনই সন্তুষ্ট হয়, নেস্টেড' যদি না হয় তবেই সন্তুষ্ট হয় যখন সমস্ত শর্তগুলি মিথ্যা থাকে। এটি একটি 'বা' অপরেন্ডের সাথে আপনি যা করতে চান তার সাথে একই রকম, তাই না?
এমনকি নেস্টেড 'যদি না হয়' এর যে কোনও একটি শর্ত সত্য হলে পুরো বিবৃতিটি সন্তুষ্ট থাকে না। অতএব, আপনি যদি আপনার সমস্ত নেস্টেড শর্তগুলি মিথ্যা হয় তবে শর্ত বিবরণীর শিরোনামটি যা করতে হবে তা মনে রেখে আপনি পরিত্যক্ত 'যদি ব্যবহার করতে পারেন'। আপনি আসলে যে দেহটি দিতে চেয়েছিলেন তা অন্য বিবৃতিতে আসতে হবে।
এবং যদি আপনি এখনও এই জিনিসটির রসিকতা না পেয়ে থাকেন তবে দুঃখিত, আমি 16 বছর বয়সী এবং এটিই আমি সবচেয়ে ভাল ব্যাখ্যা করতে পারি।
এটি নিম্নলিখিতগুলির মতোই সহজ:
এবং> যদি + হয়
if "%VAR1%"=="VALUE" if "%VAR2%"=="VALUE" *do something*
OR> if // if
set BOTH=0
if "%VAR1%"=="VALUE" if "%VAR2%"=="VALUE" set BOTH=1
if "%BOTH%"=="0" if "%VAR1%"=="VALUE" *do something*
if "%BOTH%"=="0" if "%VAR2%"=="VALUE" *do something*
আমি জানি যে অন্যান্য উত্তর রয়েছে তবে আমি মনে করি খনিটি আরও সাধারণ, এত সহজে বোঝা যায়। আশা করি এটি আপনাকে সহায়তা করবে! ;)
একটি বিকল্প হ'ল ইউনিক্স শেলটি সন্ধান করা যা আপনাকে লজিকাল অপারেটর এবং আরও অনেক কিছু দেয়। আপনি যদি সাইগউইন রুটে যেতে না চান তবে আপনি এখানে বোর্ন শেলটির নেটিভ উইন 32 বাস্তবায়ন পেতে পারেন । একটি নেটিভ বাশ এখানে পাওয়া যাবে । আমি নিশ্চিত যে আপনি সহজেই অন্যান্য ভাল বিকল্পগুলি যেমন zsh বা tcsh গুগল করতে পারেন।
কে
অ্যানড্রির উত্তরে সামান্য পরিবর্তন, সদৃশ প্রকারের আদেশগুলি হ্রাস করে:
set "A=1" & set "B=2" & call :IF_AND
set "A=1" & set "B=3" & call :IF_AND
set "A=2" & set "B=2" & call :IF_AND
set "A=2" & set "B=3" & call :IF_AND
echo.
set "A=1" & set "B=2" & call :IF_OR
set "A=1" & set "B=3" & call :IF_OR
set "A=2" & set "B=2" & call :IF_OR
set "A=2" & set "B=3" & call :IF_OR
goto :eof
:IF_OR
(if /i not %A% EQU 1 (
if /i not %B% EQU 2 (
echo FALSE-
type 2>nul
)
)) && echo TRUE+
goto :eof
:IF_AND
(if /i %A% EQU 1 (
if /i %B% EQU 2 (
echo TRUE+
type 2>nul
)
)) && echo FALSE-
goto :eof