cmd.exe: сложные условия?

в пакетных файлах DOS, В IF оператор, действительно ли возможно объединить два или больше использования условий И или ИЛИ? Я не смог найти любую документацию для этого

Редактирование - help if и в документах MS ничто не говорится об использовании больше чем одного условия в если.

Я предполагаю обходное решение для И должен был бы сделать

if COND1 (
  if COND2 (
    cmd
  )
)

но это точно, чего я стараюсь избегать.

13
задан shoosh 5 May 2010 в 10:16
поделиться

2 ответа

Нет, более простого способа нет.

Для и вы также можете просто соединить их в цепочку без введения блоков:

if COND1 if COND2 ...

что, честно говоря, не хуже

if COND1 and COND2 ...

Однако для или это становится более уродливым, действительно:

set COND=
if COND1 set COND=1
if COND2 set COND=1
if defined COND ...

или:

if COND1 goto :meh
if COND2 goto :meh
goto :meh2
:meh
...
:meh2

Однажды я видел пакетный препроцессор, который использовал C-подобный синтаксис для потока управления и пакетных вещей между ними, а затем преобразовывал такие условия в многочисленные переходы и проверки. Однако эта штука предназначалась для пакетных файлов DOS и была практически бесполезна в среде Windows.

14
ответ дан 1 December 2019 в 23:14
поделиться

Пока поскольку расширения команд включены, вы можете использовать операторы сравнения.

Это непосредственно вставлено из "help if":

Если расширения команд включены, IF изменяется следующим образом:

IF [/I] string1 compare-op string2 command
IF CMDEXTVERSION number command
IF DEFINED variable command

где compare-op может принимать одно из следующих значений:

EQU - equal
NEQ - not equal
LSS - less than
LEQ - less than or equal
GTR - greater than
GEQ - greater than or equal

и переключатель / I, если он указан, говорит делать сравнение строк без учета регистра . Ключ / I также можно использовать в форме строка1 == строка2 оператора IF. Эти сравнения являются общими: если и строка1, и строка2 состоят из всех числовых цифр, тогда строки преобразуются в числа и выполняется числовое сравнение.

-6
ответ дан 1 December 2019 в 23:14
поделиться