Подтвердить что ты не робот

Пакетные файлы Windows: несколько, если условия

Есть ли способ сказать что-то вроде

if %1 == 1 or %1 == 2

в пакетном файле? Или, что еще лучше, если бы я мог указать набор значений кандидатов, например

if %1 in [1, 2, 3, 4, ... 20]
4b9b3361

Ответ 1

Один из способов реализации логического - или использовать несколько условных выражений, что goto одна и та же метка.

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

Чтобы проверить членство в наборе, вы можете использовать for-loop:

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

Обратите внимание, что == является оператором равенства строк. equ - это оператор числового равенства.

Ответ 2

"и" оказывается легким - просто не синтаксис, который вы ожидаете: Эти 3 примера иллюстрируют это.

В словах: If 1 == 1 AND 2 == 2 Затем echo "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)

Ответ 3

Я знаю, что это старо, но я просто хотел сообщить вам, что это действительно возможно, в отличие от предыдущих сообщений. В основном вы связываете две команды IF в одну.

Синтаксис: IF equation (cmd if true)else command if false

Попробуйте это для двух переменных (для выполнения инструкции 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

с одной переменной (для выполнения примечания OR вы можете использовать более одной переменной)

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

Вы можете заменить Echo pass/fail командой

Ответ 4

Немного поздно в игре, но, тем не менее, предполагая, может ли это помочь кому-то наткнуться на вопрос. Способ, которым я это делаю, - использовать комбинацию эхо-канала для findstr, таким образом:

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

Так как findstr является внешней командой, я не рекомендую использовать ее внутри цикла, который может проходить через 1000 итераций. Если это не так, это должно решить то, что вы пытаетесь сделать, вместо использования нескольких ifs. Кроме того, нет ничего особенного в выборе ":", просто используйте разделитель, который вряд ли будет частью значения в% 1.

Благодаря остальным людям, указывая на другую ссылку, которая, похоже, имеет похожий вопрос, я также опубликую этот ответ, на всякий случай кто-то наткнулся на этот вопрос и не совсем дотянется здесь.