如果批处理文件中有条件

bdh*_*har 17 windows batch-file

@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
Run Code Online (Sandbox Code Playgroud)

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

该命令的语法不正确.

谢谢.

pax*_*blo 31

echo必须位于if语句的末尾:

if %var1%=="Yes" echo Var1 set
Run Code Online (Sandbox Code Playgroud)

或以下形式:

if %var1%=="Yes" (
    echo Var1 set
)
Run Code Online (Sandbox Code Playgroud)

我倾向于使用前者用于非常简单的条件,后者用于多命令和原始while语句:

:while1
    if %var1%=="Yes" (
        :: Do something that potentially changes var1
        goto :while1
    )
Run Code Online (Sandbox Code Playgroud)

您的特定代码正在尝试执行if %var1%=="Yes"本身无效的命令.


Dav*_*ebb 8

你不能把这样的换行放在中间IF.所以你可以这样做:

if %var1%=="Yes" echo Var1 set
Run Code Online (Sandbox Code Playgroud)

或者,如果您确实希望您的语句分布在多行中,则可以使用括号:

if %var1%=="Yes" (
   echo Var1 set
)
Run Code Online (Sandbox Code Playgroud)

但是,当您使用括号时要小心,因为变量扩展可能不会像您期望的那样运行.例如:

set myvar=orange

if 1==1 (
   set myvar=apple
   echo %myvar%
)
Run Code Online (Sandbox Code Playgroud)

输出:

orange
Run Code Online (Sandbox Code Playgroud)

这是因为括号之间的所有内容都被视为单个语句,并且在括号之间的任何命令运行之前都会扩展所有变量.您可以使用延迟扩展来解决此问题:

setlocal enabledelayedexpansion
set myvar=orange

if 1==1 (
   set myvar=apple
   echo !myvar!
)
Run Code Online (Sandbox Code Playgroud)