如果批处理文件中的条件

问题描述 投票:0回答:6
@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

如果我运行上面的脚本,我会收到以下错误。有人可以帮忙吗?

命令的语法是 不正确。

谢谢。

windows batch-file
6个回答
45
投票

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"
,该命令本身无效。


10
投票

您不能在

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
投票

查看 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
投票
@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

0
投票

命令行脚本中适用的语法规则禁止断行。

该命令的编写必须符合将长命令拆分为多行的规则 -

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

换句话说,必须包含插入符号 (^),以告诉 CMD 程序不要处理行尾标志。


0
投票
set myvar=Yes
if %myvar%=="Yes" (
echo Myvar is yes
set myvar=nothing
)

或者你可以像这样使用“&”:

set myvar=Yes
if %myvar%=="Yes" echo Myvar is yes&set myvar=nothing
© www.soinside.com 2019 - 2024. All rights reserved.