292

DOS バッチ ファイルに論理演算子をどのように実装しますか?

4

14 に答える 14

338

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
)
于 2010-01-26T23:07:27.833 に答える
80

このステートメントは、論理演算子and をIFサポートしていません。カスケードステートメントは、暗黙的な結合を作成します。ANDORIF

IF Exist File1.Dat IF Exist File2.Dat GOTO FILE12_EXIST_LABEL

File1.Dat が存在する場合File2.Datは、ラベルにジャンプしFILE12_EXIST_LABELます。

以下も参照してください。IF /?

于 2010-01-26T22:34:45.333 に答える
57

ド・モルガンの法則により、論理積 (「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
于 2012-05-16T04:09:59.710 に答える
7

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
于 2012-07-23T03:50:19.860 に答える
6

次の例は、AND ステートメント (変数の設定またはコマンドのパラメーターの組み込みに使用) の作成方法を示しています。

メモ帳を起動して CMD ウィンドウを閉じるには:

start notepad.exe & exit

変数「a」が何とか等しい場合、変数 x、y、および z を値に設定します。

IF "%a%"=="blah" (set x=1) & (set y=2) & (set z=3)

それが役立つことを願っています!

于 2011-11-30T19:48:35.810 に答える
2

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
于 2015-08-17T11:47:17.880 に答える
2

次のように簡単です。

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*

他にも答えがあることは承知していますが、鉱山の方が単純でわかりやすいと思います。これがお役に立てば幸いです!;)

于 2015-12-22T19:38:47.307 に答える
1

否定オペランドを試してみてください - 'not'!

ネストされた 'if' を使用して if ステートメントで 'AND' 演算を実行できる場合 (前の回答を参照)、'if not' で同じことを実行して 'or' 演算を実行できます。

まだアイデアがわからない場合は、読み進めてください。それ以外の場合は、時間を無駄にせず、プログラミングに戻ってください。

ネストされた 'if' がすべての条件が true の場合にのみ満たされるのと同様に、ネストされた 'if not' はすべての条件が false の場合にのみ満たされます。これは、「or」オペランドでやりたいことと似ていますね。

ネストされた「if not」の条件のいずれかが真であっても、ステートメント全体が満たされないままです。したがって、ネストされたすべての条件が false である場合、条件ステートメントの本文は実行したいことである必要があることを覚えておくことで、否定された 'if' を連続して使用できます。実際に与えたい本体は、else ステートメントの下にある必要があります。

それでも要点がわからない場合は、申し訳ありませんが、私は 16 歳であり、それが最善の説明です。

于 2014-04-22T15:08:22.760 に答える
0

別の方法は、論理演算子などを提供する UNIX シェルを探すことです。cygwin ルートに行きたくない場合は、ここで Bourne シェルのネイティブの win32 実装を入手できます。ネイティブの bash はここにあります。zshやtcshなど、他の優れた代替手段を簡単にグーグルで検索できると確信しています。

K

于 2010-01-26T23:16:08.920 に答える