DOS バッチ ファイルに論理演算子をどのように実装しますか?
14 に答える
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
)
このステートメントは、論理演算子and をIF
サポートしていません。カスケードステートメントは、暗黙的な結合を作成します。AND
OR
IF
IF Exist File1.Dat IF Exist File2.Dat GOTO FILE12_EXIST_LABEL
File1.Dat
と が存在する場合File2.Dat
は、ラベルにジャンプしFILE12_EXIST_LABEL
ます。
以下も参照してください。IF /?
ド・モルガンの法則により、論理積 (「OR」) を論理積 (「AND」) と否定 (「NOT」) のみを使用して変換することができます。これは、論理和 (「OR」) を 1 行に連鎖できることを意味します。
これは、名前が「ヤッコ」または「ワッコ」または「ドット」の場合、「ワーナー ブラザーまたはシスター」をエコーすることを意味します。
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」の例の別のバージョンですが、条件は 1 行に連鎖しています。leq
( の反対はgtr
、および の反対geq
はであることに注意してくださいlss
。)
set res=true
if %hour% gtr 6 if %hour% lss 22 set res=false
if "%res%"=="true" set state=asleep
OR はややトリッキーですが、それほど難しくはありません。ここに例があります
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
次の例は、AND ステートメント (変数の設定またはコマンドのパラメーターの組み込みに使用) の作成方法を示しています。
メモ帳を起動して CMD ウィンドウを閉じるには:
start notepad.exe & exit
変数「a」が何とか等しい場合、変数 x、y、および z を値に設定します。
IF "%a%"=="blah" (set x=1) & (set y=2) & (set z=3)
それが役立つことを願っています!
Athul Prakash (当時 16 歳) は、IF ステートメントの条件を否定し、実行が必要なコードを配置する場所として ELSE 句を使用することで、OR テストを実装する方法について論理的なアイデアを提供しました。ただし、彼は 2 つの IF ステートメントを使用することを提案しているため、通常は 2 つの else 句が必要であり、実行されるコードは2 回記述する必要があると思いました。ただし、GOTO を使用して必要なコードをスキップする場合は、ELSE 句を記述する代わりに、実行用のコードを1 回記述するだけで済みます。
以下は、Athul Prakash の負のロジックを実装してORを作成する方法のテスト可能な例です。
私の例では、戦車免許を持っているか、兵役を行っている場合、誰かが戦車を運転することを許可されています。2 つのプロンプトでtrueまたはfalseを入力すると、ロジックで戦車を運転できるかどうかを確認できます。
@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
次のように簡単です。
AND> if+if
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*
他にも答えがあることは承知していますが、鉱山の方が単純でわかりやすいと思います。これがお役に立てば幸いです!;)
否定オペランドを試してみてください - 'not'!
ネストされた 'if' を使用して if ステートメントで 'AND' 演算を実行できる場合 (前の回答を参照)、'if not' で同じことを実行して 'or' 演算を実行できます。
まだアイデアがわからない場合は、読み進めてください。それ以外の場合は、時間を無駄にせず、プログラミングに戻ってください。
ネストされた 'if' がすべての条件が true の場合にのみ満たされるのと同様に、ネストされた 'if not' はすべての条件が false の場合にのみ満たされます。これは、「or」オペランドでやりたいことと似ていますね。
ネストされた「if not」の条件のいずれかが真であっても、ステートメント全体が満たされないままです。したがって、ネストされたすべての条件が false である場合、条件ステートメントの本文は実行したいことである必要があることを覚えておくことで、否定された 'if' を連続して使用できます。実際に与えたい本体は、else ステートメントの下にある必要があります。
それでも要点がわからない場合は、申し訳ありませんが、私は 16 歳であり、それが最善の説明です。