1.IF的第一种用法,比较字符串

if/?(2019.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 off
if exist C:\windows (
echo 你的C盘有windows文件(夹^)
) else (
echo 你的C盘没有windows文件(夹^)
)
pause>nul

"^"为转义符号,在特殊符号一节再作讲解

4.IF的第四种用法,检测变量是否被定义

例:

@echo off
set var=aiwozhonghua
if defined var (
echo 变量var已被定义,它的值为%var% 
) else (
echo 变量var没有被定义
)
pause>nul

去掉第一行的set看看执行结果有什么不同,你明白它的用法了吗?

5.IF的第五种用法,判断返回值(ERRORLEVEL)

要判断返回值,首先要理解返回值是个什么概念,批处理中的返回值一般表示了上个命令的执行结果(成功/失败/等)
每个命令执行完毕后返回值都会做相应的更改,一般返回值为0表示成功,1表示失败,有一些第三方的返回值比较特殊(如Choice.exe,Tmos.exe,Cmos.exe),在这里就不讲解了
例:

@echo off
echo;>>%systemroot%\test.txt
if errorlevel 0 ( echo 写入成功! ) else echo 写入失败
pause>nul

这段代码尝试向%systemroot%\system32\写入数据,如果权限不够或杀毒软件拦截就会写入失败,这时就会显示"写入失败".不知道%systemroot%表示了什么?单独键入set自己仔细看一下结果.
  
不过看到后面你会发现这段代码还有更简便的写法
注:用 if errorlevel判断返回值时要将返回值从大到小排列
例:

@echo off
choice /C:ABC /n "A/B/C"
if errorlevel 3 echo You choose the C
if errorlevel 2 echo You choose the B
if errorlevel 1 echo You choose the A
pause>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那么好
附:"::"其实就是不规范的标签名…
参考:https://baike.baidu.com/item/bat/365230?fr=aladdin

(31条消息) BAT批处理文件 if命令详解_望语挽枫的博客-CSDN博客_bat if

BAT批处理文件 if命令详解相关推荐

  1. BAT批处理文件 for命令详解

    Windows bat脚本的for语句基本形态如下: 在cmd窗口中:for %I in (command1) do command2 在批处理文件中:for %%I in (command1) do ...

  2. BAT批处理文件 shutdown命令详解

    一个简单的例子 新建一个*.txt打开. 输入 shutdown /s /t 60 /c "您的电脑还有60秒自动关机" 保存文件,并将文件后缀名改为.bat. 右击以管理员身份打 ...

  3. BAT批处理文件 attrib命令详解

    attrib/?(2019.04.25) 显示或更改文件属性. ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] [+O | -O] [+I | -I] [ ...

  4. BAT批处理文件 ipconfig命令详解

    ipconfig显示所有当前的 TCP/IP 网络配置值.刷新动态主机配置协议 (DHCP) 和域名系统 (DNS) 设置.使用不带参数的 ipconfig 可以显示所有适配器的 IP 地址.子网掩码 ...

  5. DOS循环:bat/批处理for命令详解之一 (史上虽详尽的总结和说明~~)

    DOS循环:bat/批处理for命令详解之一 (史上虽详尽的总结和说明~~) --- --- 前言: 虽然以前对批处理也算有点研究,但一直对for命令理解不够透彻,偶尔用时也是照猫画虎的用一下. 虽然 ...

  6. 批处理(bat)if 命令详解

    语法 if命令有以下5钟用法 if "字符串1"=="字符串2" command 语句 判断两个字符串是否相等 if 数值1 equ 数值2 command 语 ...

  7. 批处理if 命令详解

    批处理(bat)if 命令详解 一.语法规则 1.if命令5钟用法 if "字符串1"=="字符串2" command 语句 #判断两个字符串是否相等 if 数 ...

  8. c语言d打开文件夹,BAT批处理之文件与文件夹操作代码(附xcopy命令详解)

    批处理中的文件.文件夹操作,xcopy命令的用法. 一,建bat文件自动执行复制,删除命令. 例1:复制cd.dll文件至windows\system32的bat文件内容: copy cd.dll % ...

  9. BAT批处理之文件与文件夹(附xcopy命令详解)

    在 批处理脚本中,操作文件与文件夹的方法,包括文件的复制.删除.移动等操作,并附有xcopy命令的详细用法. 原文地址: http://www.jbxue.com/article/14535.html ...

最新文章

  1. linux nfs搭建
  2. 从表达式到函数:表面的简洁
  3. pyspark读写SequenceFile
  4. PowerTip of the Day-Finding Invalid Aliases
  5. iOS IM开发建议(一)App框架设计
  6. flash推荐助手怎么关掉_彻底清除“FF新推荐”“Flash助手”的弹出广告
  7. 20211010 PHP笔记
  8. windows下安装pycharm并连接Linux的python环境
  9. 【目标检测】目标检测中的多尺度检测(Multi-Scale),FPN,RPN
  10. 网游设想二:九重天[]
  11. centos6.5系统执行mv /* /path,只能用cd命令,如何恢复
  12. 5分钟学会制作自动化脚本——自动化脚本辅助开发IDE——Selenium IDE介绍(测试工程师必备)
  13. java接口分几种类型_细数Java接口的概念、分类及与抽象类的区别
  14. 《IS-IS网络设计解决方案》一第6章 最短路径优先算法6.1 SPF算法概述
  15. DruidDataSource
  16. 【柒穆雨】什么是平面设计,学习平面设计需要具备什么条件?
  17. NGUI动态字体教程
  18. mathmatica中ListLinePlot函数画图不能混合是咋回事啊
  19. 微服务--十个设计要点
  20. php 五子棋对战,五林大会五子棋

热门文章

  1. 图纸管理重复利用解决方法
  2. mybatis根据批量id查询批量信息
  3. Untitled-1
  4. 推荐几个常用的RapidShare搜索引擎
  5. JS学习笔记-判断文本域当中滚动条的位置、滚动条下拉至底部才可以提交
  6. android 图标切换动画效果,BezierCurve
  7. Connection CommandTimeout和Command CommandTimeout的区别(转)
  8. WPF控件自定义点击事件
  9. 欧朋浏览器的移动互联网变局
  10. FileInfo和DirectoryInfo