Если условие в пакетных файлах - PullRequest
17 голосов
/ 23 декабря 2009
@echo off
SET var1="Yes"
SET var2="No"
SET var3="Yes"
if %var1%=="Yes"
    echo Var1 set
if %var2%=="Yes"
    echo Var2 set
if %var3%=="Yes"
    echo Var3 set

Если я запускаю вышеуказанный скрипт, я получаю следующую ошибку. Может кто-нибудь, пожалуйста, помогите?

Синтаксис команды неверен.

Спасибо.

Ответы [ 4 ]

29 голосов
/ 23 декабря 2009

Эхо должно быть либо в конце оператора if:

if %var1%=="Yes" echo Var1 set

или следующей формы:

if %var1%=="Yes" (
    echo Var1 set
)

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

:while1
    if %var1%=="Yes" (
        :: Do something that potentially changes var1
        goto :while1
    )

То, что делает ваш конкретный фрагмент кода, пытается выполнить команду if %var1%=="Yes", которая сама по себе недопустима.

8 голосов
/ 23 декабря 2009

Вы не можете поместить новую строку в середине IF. Так что вы можете сделать это:

if %var1%=="Yes" echo Var1 set

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

if %var1%=="Yes" (
   echo Var1 set
)

Однако, когда вы используете скобки, будьте осторожны, потому что расширение переменной может вести себя не так, как вы ожидаете. Например:

set myvar=orange

if 1==1 (
   set myvar=apple
   echo %myvar%
)

Выходы:

orange

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

setlocal enabledelayedexpansion
set myvar=orange

if 1==1 (
   set myvar=apple
   echo !myvar!
)
3 голосов
/ 23 декабря 2009

Посмотрите справку по команде IF:

C:\Users\Rubens>if /?
Performs conditional processing in batch programs.

IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command

Итак, ваша команда должна быть в одной строке IF. Ваш скрипт должен быть:

@echo off
SET var1="Yes"
SET var2="No"
SET var3="Yes"
if %var1%=="Yes" echo Var1 set
if %var2%=="Yes" echo Var2 set
if %var3%=="Yes" echo Var3 set
1 голос
/ 02 января 2014
@echo off
setlocal enabledelayedexpansion

set var1=1
set var2=2
set var3=1

if "!var1!" == "1" echo Var1 set
if "!var2!" == "1" echo Var2 set
if "!var3!" == "1" echo Var3 set
pause
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...