जवाबों:
आप 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 /?
डी मॉर्गन के नियम हमें केवल संयोजन ("और") और नकारात्मक ("नहीं") का उपयोग करके असमानता ("या") को तार्किक समकक्षों में बदलने की अनुमति देते हैं। इसका मतलब है कि हम एक लाइन पर असमानता ("ओआर") को चेन कर सकते हैं।
इसका मतलब है अगर नाम "याकोको" या "वाको" या "डॉट" है, तो "वार्नर भाई या बहन" की प्रतिध्वनि करें।
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
यह paxdiablo के "OR" उदाहरण का एक और संस्करण है, लेकिन शर्तों को एक पंक्ति में जंजीर किया गया है। (ध्यान दें कि इसके विपरीत leq
है gtr
, और इसके विपरीत geq
है lss
।)
set res=true
if %hour% gtr 6 if %hour% lss 22 set res=false
if "%res%"=="true" set state=asleep
निम्न उदाहरण दिखाते हैं कि एक AND कथन कैसे बनाया जाता है (चर के लिए या कमांड के लिए पैरामीटर सहित)।
नोटपैड शुरू करने और CMD विंडो बंद करने के लिए:
start notepad.exe & exit
यदि चर 'a' के बराबर होता है, तो चर x, y और z सेट करने के लिए।
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
आईएफएस स्टेटमेंट्स में शर्तों को नकारते हुए या फिर ईएलएसई क्लॉज का उपयोग करते हुए कोड डालने के लिए स्थान के रूप में ईएलएसई क्लॉज का उपयोग करके ओआरएस टेस्ट कैसे लागू किया जाए, इसके लिए एक तार्किक विचार दिया। मैंने अपने आप से सोचा था कि हालांकि दो IF स्टेटमेंट का उपयोग करने का सुझाव देने के बाद से आमतौर पर दो और क्लॉज़ हैं, और इसलिए निष्पादित कोड को दो बार लिखने की आवश्यकता है । हालाँकि, अगर GOTO का उपयोग आवश्यक कोड को छोड़ने के लिए किया जाता है, तो लिखने के बजाय ELSE निष्पादन के लिए कोड को क्लॉस करता है, केवल एक बार लिखने की आवश्यकता होती है ।
यहाँ कैसे मैं एक बनाने के लिए Athul प्रकाश की नकारात्मक तर्क लागू होगा की एक परीक्षण योग्य उदाहरण है या ।
मेरे उदाहरण में, किसी को टैंक चलाने की अनुमति है यदि उनके पास टैंक लाइसेंस है या वे अपनी सैन्य सेवा कर रहे हैं । दो संकेतों पर सही या गलत दर्ज करें और आप यह देख पाएंगे कि क्या तर्क आपको टैंक चलाने की अनुमति देता है।
@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
, तो इसमें से कोई भी नहीं है। लेकिन, आप अभी भी / और / बयानों के if
साथ समूह बना सकते हैं कि आप एक लाइन w / o में कोई अतिरिक्त चर चाहते हैं और w / o ब्लॉक दोहराव (एकल और कोड अनुभागों के लिए कमांड ):&&
||
(
)
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*
या> अगर // अगर
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*
मुझे पता है कि अन्य उत्तर भी हैं, लेकिन मुझे लगता है कि खदान अधिक सरल है, इसलिए समझना अधिक आसान है। आशा है कि यह आपकी मदद करता है! ;)
एक विकल्प एक यूनिक्स खोल की तलाश है जो आपको तार्किक ऑपरेटर और पूरे बहुत कुछ देता है। यदि आप साइबरविन मार्ग पर नहीं जाना चाहते हैं तो आप यहां बॉर्न शेल का एक देशी win32 कार्यान्वयन प्राप्त कर सकते हैं । यहां देशी कट्टा मिल सकता है । मुझे पूरा यकीन है कि आप आसानी से अन्य अच्छे विकल्प जैसे कि zsh या tsh को google कर सकते हैं।
क
एंड्री के जवाब के लिए थोड़ा संशोधन, डुप्लिकेट प्रकार के आदेशों को कम करना:
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