Если условие в пакетных файлах
@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
Если я запустил выше script, я получаю следующую ошибку. Может ли кто-нибудь помочь?
Синтаксис команды: неверно.
Спасибо.
Ответы
Ответ 1
Эхо должно либо находиться в конце оператора 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"
, которая сама по себе недействительна.
Ответ 2
Вы не можете поместить эту строку в середину 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
Взгляните на подсказку с помощью команды:
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. Ваш script должен быть:
@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
@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