1.IF的第一种用法,比较字符串
if/?(.04.27)
执行批处理程序中的条件处理。
IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
NOT 指定只有条件为 false 的情况下,Windows 才应该执行该命令。
ERRORLEVEL number 如果最后运行的程序返回一个等于或大于指定数字的退出代码,指定条件为 true。
string1==string2 如果指定的文字字符串匹配,指定条件为 true。
EXIST filename 如果指定的文件名存在,指定条件为 true。
command 如果符合条件,指定要执行的命令。如果指定的条件为 FALSE,命令后可跟 ELSE 命令,该命令将在 ELSE 关键字之后执行该命令。
ELSE 子句必须出现在同一行上的 IF 之后。例如:
IF EXIST filename. (del filename.) ELSE (echo filename. missing.)
例:
set /p PW=请输入密码:if %PW%==bat (echo YES!) ELSE (Rem [else] 为可选参数,表示否则,即如果变量PW等于bat则输出YES!否则输出NO!echo NO!)pause>nul
通过set /p和if可以实现一个简单的密码判断,当然这个密码判断可以很轻易地被破解,仔细动脑筋想一想,该怎么破解呢.
不过这个密码判断尚有不足之处,假如我们什么都不输入直接回车,便会提示错误,那该怎么办呢?很简单,只要加上双引号(其它的符号也行)就行了=>if “%PW%”==“bat”
2.IF的第二种用法,比较数字
例:
set /p num1=请第一个输入数字:set /p num2=请第二个输入数字:if not %num1% LSS %num2% (rem lss表示小于rem [not]为可选参数,表示非,即如果变量num1不小于变量num2就输出第一个数字大,否则输出第二个数字大echo 第一个数字大) ELSE (echo 第二个数字大)pause>nul
这段代码可以实现一个简单的判断,不过尚有不足之处-----如果这两个数字相等呢,这就要请出我们的else if啦(当然你也可以用几个if来判断)
set /p num1=请第一个输入数字:set /p num2=请第二个输入数字:if "%num1%" gtr "%num2%" (echo 第一个数字大) ELSE if "%num1%" EQU "%num2%" (echo 一样大) ELSE (echo 第二个数字大)pause>nul
------比较运算符-----
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
3.IF的第三种用法,检测文件(夹)是否存在
例:
@echo offif exist C:\windows (echo 你的C盘有windows文件(夹^)) else (echo 你的C盘没有windows文件(夹^))pause>nul
"^"为转义符号,在特殊符号一节再作讲解
4.IF的第四种用法,检测变量是否被定义
例:
@echo offset var=aiwozhonghuaif defined var (echo 变量var已被定义,它的值为%var%) else (echo 变量var没有被定义)pause>nul
去掉第一行的set看看执行结果有什么不同,你明白它的用法了吗?
5.IF的第五种用法,判断返回值(ERRORLEVEL)
要判断返回值,首先要理解返回值是个什么概念,批处理中的返回值一般表示了上个命令的执行结果(成功/失败/等)
每个命令执行完毕后返回值都会做相应的更改,一般返回值为0表示成功,1表示失败,有一些第三方的返回值比较特殊(如Choice.exe,Tmos.exe,Cmos.exe),在这里就不讲解了
例:
@echo offecho;>>%systemroot%\test.txtif errorlevel 0 ( echo 写入成功! ) else echo 写入失败pause>nul
这段代码尝试向%systemroot%\system32\写入数据,如果权限不够或杀毒软件拦截就会写入失败,这时就会显示"写入失败".不知道%systemroot%表示了什么?单独键入set自己仔细看一下结果.
不过看到后面你会发现这段代码还有更简便的写法
注:用 if errorlevel判断返回值时要将返回值从大到小排列
例:
@echo offchoice /C:ABC /n "A/B/C"if errorlevel 3 echo You choose the Cif errorlevel 2 echo You choose the Bif errorlevel 1 echo You choose the Apause>nul
GOTO
将 cmd.exe 导向到批处理程序中带标签的行。
GOTO label
label 指定批处理程序中用作标签的文字字符串。
标签必须单独一行,并且以冒号打头。
如果命令扩展名被启用,GOTO 会如下改变:
GOTO 命令现在接受目标标签 :EOF,这个标签将控制转移到当前
批脚本文件的结尾。不定义就退出批脚本文件,这是一个容易的
办法。有关能使该功能有用的 CALL 命令的扩展名描述,请键入
CALL /?。
label是什么?这可不是命令label,它指的是标签,标签是啥?见例子
例:@echo offset /p pw=请输入密码:if "%pw%"=="bathome" goto yesgoto :eofrem 未定义的:eof会退出脚本文件:yesecho 密码正确!pause>nul
这是一个更加完整的密码判断,仔细阅读并执行这行代码,现在你知道标签是什么了吗,没错,那个:yes就是标签了!
标签的格式
:标签名
关掉回显以后你有没有发现什么?没错,标签所在的那一行没有被执行,这就是为什么::比rem更快的原因了,但是标签不能被使用在一个语句的内部,主要就是被括号括起来的语句(是的,被括号括起来的语句被看作一个整体),因此::的兼容性没有rem那么好
附:"::"其实就是不规范的标签名…
参考:/item/bat/365230?fr=aladdin
(31条消息) BAT批处理文件 if命令详解_望语挽枫的博客-CSDN博客_bat if
如果觉得《BAT批处理文件 if命令详解》对你有帮助,请点赞、收藏,并留下你的观点哦!