web-dev-qa-db-ja.com

Windowsバッチファイル:複数のif条件

のような何かを言う方法はありますか

 if%1 == 1または%1 == 2 

バッチファイルで?または、さらに良いことに、次のような候補値のセットを指定できれば

 [1、2、3、4、... 20] 
の%1の場合
25

Logical-orを実装する1つの方法は、goto同じラベルである複数の条件を使用することです。

if %1 == 1 goto :cond
if %1 == 2 goto :cond
goto :skip
:cond
someCommand
:skip

セットメンバーシップをテストするには、forループを使用できます。

for %%i in (1 2 3 4 ... 20) do if %1 == %%i someCommand

ご了承ください ==は文字列の等価演算子です。 equは数値等式演算子です。

23
bk1e

「and」は簡単であることが判明しましたが、期待する構文ではありません。これらの3つの例はそれを示しています。

つまり、1 == 1かつ2 == 2の場合、「hello」をエコーし​​ます。

if 1==1 echo hello
hello

if 1==1 if 2==2 echo hello
hello

if 1==1 if 2==1 echo hello
(nothing was echoed)
25
Dana Forsberg

これは古いことは知っていますが、以前の投稿とは異なり、実際に可能であることをお知らせしたかっただけです。基本的に、2つのIFコマンドを1つに結び付けています。

構文:IF equation (cmd if true)else command if false

2つの変数でこれを試してください(IF xx AND xxステートメントを実行するため)

set varone=1
set vartwo=2

if %varone% equ 1 (if %vartwo% equ 2 (echo TRUE)else echo FALSE)else echo FALSE

1つの変数(ORステートメントを実行するために、複数の変数も使用できることに注意してください)

if %a% equ 1 (echo pass)else if %a equ 2 (echo pass)else echo false

Echo pass/failをコマンドで置き換えることができます

9
bill

ゲームで少し遅れましたが、それでもこれが誰かがつまずくのを助けるかもしれないと仮定しています。私がこれを行う方法は、findstrにパイプされたエコーの組み合わせを次のように使用することです:

(echo ":1: :2:" | findstr /i ":%1:" 1>nul 2>nul) && (
    echo Input is either 1 or 2
)

Findstrは外部コマンドであるため、1000回の反復を繰り返すループ内でこれを使用しないことをお勧めします。そうでない場合は、複数のifを使用する代わりに、これで何をしようとしているかを解決できます。また、「:」の選択には特別なものはありません。%1の値の一部になる可能性が低い区切り文字を使用してください。

同様の質問があると思われる別のリンクを指し示してくれた他の人々のおかげで、誰かがその質問につまずいてここに届かない場合に備えて、この回答もそこに投稿します。

0
Arun