失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > BAT批处理文件 if命令详解

BAT批处理文件 if命令详解

时间:2020-08-12 00:04:06

相关推荐

BAT批处理文件 if命令详解

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命令详解》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。