bat脚本里面if else if的写法

第一种写法:最简单,就是写一行。

@echo off
rem 写一行比较简洁,缺点是每一种判断内不方便写多条语句
set varA=B
if "%varA%"=="A" (echo %varA% is A) else if "%varA%"=="B" (echo %varA% is B) else (echo %varA% is C)

pause
@echo off 
title "copy UI"

:: userName passwd srcDir trgtDir
echo 1: %1
echo 2: %2
set aaa=%1
:: "\\"需要写成"\\\\"
if not %aaa:~0,2% == \\\\ (
    set net_addr=%1
)  else  (
    set net_addr=%2
)

echo %net_addr%

pause

第二种写法:可读性好的语法是分行写

@echo off
rem 在这种写法可读性好,也能执行多语句,但兼容性不太好
set varA=B
if "%varA%"=="A" (
    echo %varA% is A
    echo AAA
) else if "%varA%"=="B" (
    echo %varA% is B
    echo BBB
) else (
    echo %varA% is C
    echo CCC
)

pause

 第三种写法:可读性好的语法是分行写的加强版

@echo off
rem 可读性好,兼容性好

setlocal EnableDelayedExpansion
set option=2
set sum=-1

if %option% == 3 ( 
  echo three 
  set /a sum=%option%*%option%*%option%
) ^
else if %option% == 2 ( 
  echo two 
  set /a sum=2*%option%
) ^
else if %option% == 1 ( 
  echo one 
  set /a sum=%option% 
) ^
else ( 
  echo zero 
  set /a sum=0 
)

echo sum = !sum!

pause

总结: 

    if 语句与左括号 ( 同行
    右括号 ) 不与 else if 同行
    右括号 ) 后面加上续行操作符 ^

示例

示例1

@echo off
if exist "C:\Documents and Settings\Administrator\桌面\T1\txt\批处理实验\unit1\a.txt" (
  echo file is find!
del "C:\Documents and Settings\Administrator\桌面\T1\txt\批处理实验\unit1\a.txt"
) else (
  echo file is not found!
)
pause>nul

示例2

@ echo  off
if  abc==ABC (
    echo  abc euqal ABC
)  else  (
    echo  abc not euqal ABC
)
pause>nul

 示例3

@ echo  off
if  %errorlevel%==0 (
   echo  success!
)  else  (
   echo  failed!
)
pause>nul

示例4

@ echo  off
#判断文件是否存在
if  exist C:\a.txt (
   echo  file  is  find !
del C:\a.txt
)  else  (
   echo  file  is not found!
)
pause>nul

 示例5

@ echo  off
set  var1=123
set  var2=abc
set  var3=12
#字符串比较
if  /i  %var2% equ ABC (
   if  %var1% geq %var3% (
     echo  %var1%^>=%var3%
   )  else  (
     echo  %var1%^<%var3%
   )
)  else  (
   echo  %var2%不等于ABC
)
pause>nul

操作数可以是字符串也可以是数值,同时还可以是变量;
    "/I"选项用于开启比较过程中字符串大小写忽略功能;
在命令扩展下支持的比较运算符有:
    "equ(等于)"、"neq(不等于)"、"lss(小于)"、"leq(小于等于)"、"gtr(大于)"、"geq(大于等于)"六种,

"lss"、"leq"、"gtr"和"geq"四种比较操作符主要用于对数值进行比较,
    当参与比较的字符串是字符串时,将被转换为对于的ASCII码进行比较;
    而"equ"和"neq"既可以比较数值也可以比较字符串。

if用于条件判断,适用于以下情形:

  1. 判断驱动器、文件或文件夹是否存在,用 if exist 语句;
  2. 判断某两个字符串是否相等,用 if "字符串1"=="字符串2" 语句;
  3. 判断某两个数值是否相等,用 if 数值1 equ 数值2 语句;
  4. 判断某个变量是否已经被赋值,用 if defined str 语句;

if 条件表达式 (语句1) else (语句2),它的含义是:如果条件表达式成立,那么,就执行语句1,否则,将执行语句2。

  对于以上四种情形,可以分别使用如下代码:

  1. if exist d:\test.txt (echo D盘下有test.txt存在) else (echo D盘下不存在test.txt)
  2. if "abc"=="xyz" (echo 字符串abc等于字符串xyz) else (echo 字符串abc不等于字符串xyz)
  3. if 1 equ 2 (echo 1等于2) else (echo 1不等于2)
  4. if defined str (echo 变量str已经被赋值,其值为%str%) else (echo 变量str的值为空)

判断字符串是否相等的时候,if会区分大小写,比如,单纯的if语句会认为字符串abc和字符串Abc不相同,若不想区分大小写,则需要添加 /i 开关,使用 if /i "字符串1"=="字符串2" 的格式;另外,等于符号是连续的"=="而非单独的"="。

  判断两个数值之间的大小关系,除了等于用equ之外,还有其他的关系符号,所有适用于if语句的关系符号见下表:

中文含义 关系符 英文解释

等于  equ equal
大于  gtr greater than
大于或等于 geq greater than or equal
小于  lss less than
小于或等于 leq less than or equal
不等于  neq no equal

  if语句还有一个精简格式:if 条件表达式 语句,它的含义是:如果条件表达式成立,将执行语句,否则,什么也不做。