@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
如果我运行上面的脚本,我会收到以下错误。任何人都可以帮忙吗?
该命令的语法是 不正确。
感谢。
答案 0 :(得分:29)
echo必须位于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"
本身无效。
答案 1 :(得分:8)
你不能在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!
)
答案 2 :(得分:3)
看看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
答案 3 :(得分:1)
@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
答案 4 :(得分:0)
根据命令行脚本中适用的语法规则,禁止使用换行符。
必须编写命令以符合将长命令分成多行的规则-
if %var1%=="Yes"^
echo Var1 set
换句话说,必须包含一个脱字符号(^),以告诉CMD程序不要处理行尾标记。