のような何かを言う方法はありますか
if%1 == 1または%1 == 2
バッチファイルで?または、さらに良いことに、次のような候補値のセットを指定できれば
[1、2、3、4、... 20] の%1の場合
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
は数値等式演算子です。
「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)
これは古いことは知っていますが、以前の投稿とは異なり、実際に可能であることをお知らせしたかっただけです。基本的に、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をコマンドで置き換えることができます
ゲームで少し遅れましたが、それでもこれが誰かがつまずくのを助けるかもしれないと仮定しています。私がこれを行う方法は、findstrにパイプされたエコーの組み合わせを次のように使用することです:
(echo ":1: :2:" | findstr /i ":%1:" 1>nul 2>nul) && (
echo Input is either 1 or 2
)
Findstrは外部コマンドであるため、1000回の反復を繰り返すループ内でこれを使用しないことをお勧めします。そうでない場合は、複数のifを使用する代わりに、これで何をしようとしているかを解決できます。また、「:」の選択には特別なものはありません。%1の値の一部になる可能性が低い区切り文字を使用してください。
同様の質問があると思われる別のリンクを指し示してくれた他の人々のおかげで、誰かがその質問につまずいてここに届かない場合に備えて、この回答もそこに投稿します。