2012-06-03 4 views
4

Могу ли я указать несколько условий с "или"/"и" в пакетном файле if блок?Как использовать несколько условий в «If» в пакетном файле?

Если не так сложна, я могу по крайней мере, использовать что-то вроде:

if value1 < value < value2 

В основном моя цель состоит в том, чтобы проверить, попадает ли текущее системное время в определенном интервале (2:05 утра и 7:55 утра, чтобы быть точным) и если это так, выполнить определенные команды.

ответ

13

Добавляя к ответу dbenham, вы можете эмулировать оба логических оператора (AND, OR), используя комбинацию из if и goto операторов.

Чтобы проверить Condition1 И codition2:

if <condition1> if <condition2> goto ResultTrue 

:ResultFalse 
REM do something for a false result 
    goto Done 

:ResultTrue 
REM do something for a true result 

:Done 

Чтобы проверить Condition1 ИЛИ codition2:

if <condition1> goto ResultTrue 
    if <condition2> goto ResultTrue 

:ResultFalse 
REM do something for a false result 
    goto Done 

:ResultTrue 
REM do something for a true result 

:Done 

этикетки конечно произвольно, и вы можете выбрать их имена до тех пор, они уникальны.

+0

Я использовал, чтобы написать 'если c1 c2, если Гот AndTrue' в этом (четком) образом:' установить и = если ',' если c1% и% c2 goto AndTrue'. Вы должны заметить, что у этих конструкций не может быть ELSE! – Aacini

+0

@ В моих конструкциях у меня есть случай «else» в разделе «ResultFalse». –

+0

Я не вижу никакой пользы от использования GOTO для моделирования ИМ - вы можете просто сгруппировать IF вместе и поставить ELSE с последним IF. Но GOTO - хорошее решение для OR. Другой вариант - использовать временную переменную: «set» OR = «& ((если установить« OR = 1 ») и если установить« OR = 1 ») и если определено OR (echo TRUE) else (echo FALSE) '. Одна из причин использования этого метода вместо GOTO была бы, если ваш OR-тест находится в скобках в скобках - вы не можете GOTO метку в скобках в скобках кода. – dbenham

5

В партии нет логических операторов. Но и это легко имитировать с двумя IF заявления

if value1 lss value if value lss value2 REM do something 

Batch IF заявление не знает, как сравнивать раз. Пакет IF знает, как сравнивать целые числа и строки.

Один из вариантов - преобразовать время в минуты или секунды за полночь.

Другой вариант - отформатировать время как в часах, минутах (и секундах, если необходимо), так и в 2 числах по ширине (0 при необходимости). Часы должны быть 24-часовой формат (военное время).

0

Вы можете разбить свое состояние на 2 и использовать, если и если для установки 2 условия

if %value% GTR %value1% (
echo Value is greater that %value1%) else call :Error 
if %value% LSS %value2% (
echo Value is less than %value2%) else call :Error 
::Write your Command if value lie under specified range 
exit 

:Error 
echo Value doesn't lie in the range 
::Write your command for if value doesn't lie in the range 
exit 
Смежные вопросы