0. 开篇

bat/cmd 均是window操作系统下,两者都是通过文本方式编辑,创建以及查看。均是命令的集合。bat与cmd有什么区别呢 ?

1) cmd文件允许使用的命令比bat多,但是只有在windows2000以上的系统中才能运行

2) bat 文件允许使用的命令比cmd少,但是没有系统上的限制

3) cmd文件 “Windows NT命令脚本”,bat 文件“MS DOS批处理文件”

4) 文件扩展名不同,cmd文件是".cmd",bat文件扩展名是“.bat”

批处理脚本的一些功能

  • 可以读取用户的输入,以便进一步处理。
  • 有控制结构:forifwhile 和 switch更好的自动化和脚本。
  • 支持高级功能,如函数和数组。
  • 支持正则表达式。
  • 可以包含其他编程代码,如Perl。

批处理脚本的一些用途

  • 为不同的目的设置服务器。
  • 自动管理活动和日志,如删除不需要的文件或日志文件。
  • 自动将应用程序从一个环境部署到另一个环境。
  • 立即在各种机器上安装程序。

1. 基础批处理命令

命令1:echo

命令2:md/mkdir

获取当前路径

@echo off
echo current disk: %~d0
echo current disk and path: %~dp0
echo current file: %~f0
echo short current directry path: %~sdp0
echo %cd%
pause

判断变量是否为空

很多时候,我们需要检查某个变量的值是否为空,以便做后续处理。
  对于这个问题,很多人会毫不犹豫地选择 if "%str%"=="" …… 的句式,在早期的批处理中,还可以看到这样的语句:if [%str%]==[],有人把这两种写法称为“防空字符”。
  可是,这样做真的能在各种复杂的情况下判断某个变量的值是否为空吗?
  答案是否定的。
  先来看 if [%str%]==[],当%str%为空值的时候,它无疑能成功地捕获到这一情况,但是,如果%str%中含有特殊字符,比如>、&之类,这条语句就会报错。
  为了兼容这几个特殊字符,人们绞尽脑汁,想到了 if "%str%"=="" 语句,于是,>、&、|之类的特殊字符也能顺利通过验证了,这是防空字符的一大进步。
  但是,这条语句也不是完美的,因为有一个特殊字符它完全没办法处理!
  这个特殊字符是什么呢?
  它就是双引号"本身!
  我们执行一下如下代码:

  1. @echo off
  2. set str="
  3. if "%str%"=="" (echo yes) else echo no
  4. pause

  CMD.EXE报错了:命令语法错误。
  原来,上面这条if语句执行的是 if """=="" ……,引号起到分组字符串的作用,而引号对是就近匹配的:第一个引号和第二个引号配成一对,第三个引号和第四个引号配成一对,第五个引号和第六个引号配成一对……,这条if语句最终的执行的是 if "==……,但是引号始终要作为分组字符来使用的,而单个的引号没有找到下一个可匹配的引号,所以就出现了语法错误。
  当把 %str% 的值改为两个引号的时候,上面这段代码的执行结果居然显示为no,想想这是为什么。
  if "%str%"==""……能兼容大部分特殊字符,但是偏偏不能兼容引号本身,那么,判断某个变量的值是否为空,是不是就没有更好的办法了呢?
  答案是肯定的,那就是:用 if defined str 语句来判断变量值是否为空。
  请执行以下代码:

    1. @echo off
    2. :Main
    3. cls
    4. set str=
    5. set /p "str=请输入任意字符,或直接回车:"
    6. if defined str (
    7. echo 变量 str 的值不为空
    8. ) else echo 变量 str 为空值
    9. pause
    10. goto Main

参考链接:

https://my.oschina.net/superkangning/blog/528881

https://www.yiibai.com/batch_script/

https://www.zybuluo.com/yangfch3/note/338252

【bat/cmd】脚本开发的更多相关文章

  1. 【JMeter4.0学习(二)】之搭建openLDAP在windows8.1上的安装配置以及JMeter对LDAP服务器的性能测试脚本开发

    目录: 概述 安装测试环境 安装过程 配置启动 配置搭建OpenLDAP 给数据库添加数据 测试查询刚刚插入的数据 客户端介绍 JMeter建立一个扩展LDAP服务器的性能测试脚本开发 附:LDAP学 ...

  2. 性能测试学习之路 (四)jmeter 脚本开发实战(JDBC &JMS &接口脚本 & 轻量级接口自动化测试框架)

    1.业务级脚本开发 登录脚本->思路:在线程组下新建两个HTTP请求,一个是完成访问登录页,一个是完成登录的数据提交.   步骤如下: 1) 访问登录页 2) 提交登录数据的HTTP PS:对于 ...

  3. 【转】BAT 批处理脚本 教程

    第一章 批处理基础第一节 常用批处理内部命令简介批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统称批处理命令.小知识:可以在 ...

  4. BAT 批处理脚本 教程

    第一章 批处理基础第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统称批处理命令.小知识:可以 ...

  5. 【转载】BAT 批处理脚本教程

    来源:http://www.cnblogs.com/glaivelee/archive/2009/10/07/1578737.html BAT 批处理脚本 教程   第一章 批处理基础第一节 常用批处 ...

  6. [转]BAT 批处理脚本 教程

    第一章 批处理基础第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统称批处理命令.小知识:可以 ...

  7. loadrunner 脚本开发-执行操作系统命令

    脚本开发-执行操作系统命令 by:授客 QQ:1033553122 思路: 用loadrunner system()函数 函数原型: int system( const char *string ); ...

  8. bat与jscript开发工具时遇到的一些问题

    之前使得bat调用luac进行编译时,会弹出一个"黑色的界面",闪烁一下,感觉不太好.而脚本vbs或者jscript调用bat是可以利用Run方法,将其第二个参数设置为0便可以隐藏 ...

  9. BAT 批处理脚本教程

    第一章 批处理基础第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统称批处理命令.小知识:可以 ...

随机推荐

  1. Vim配置(转)

    1.按F5可以直接编译并执行C.C++.java代码以及执行shell脚本,按“F8”可进行C.C++代码的调试 2.自动插入文件头 ,新建C.C++源文件时自动插入表头:包括文件名.作者.联系方式. ...

  2. Mysql & Hive 导入导出数据

    ---王燕行转列sql select split(concat_ws(',',collect_set(cast(smzq as string))),',')[1] ,split(concat_ws(' ...

  3. spark 写 hbase 数据库,遇到Will not attempt to authenticate using SASL (unknown error)

    今日在windows上用spark写hbase的函数 saveAsHadoopDataset 写hbase数据库的时候,遇到Will not attempt to authenticate using ...

  4. DDR的型号问题

    一.DDR的容量大小 先看下micron公司对DDR3命名的规则: 1.meg的含义: 内存中Meg的含义:Meg就是兆的含义,即1000,000. MT47H64M16 – 8 Meg x 16 x ...

  5. C#中验证sql语句是否正确(不执行语句)

    SET PARSEONLY检查每个 Transact-SQL 语句的语法并返回任何错误消息,但不编译和执行语句.SET PARSEONLY { ON | OFF }当 SET PARSEONLY 为 ...

  6. 常见XML解析器

    xpp3 官网 http://www.extreme.indiana.edu/xgws/xsoap/xpp/ 简介 Xml Pull Parser (in short XPP) is a stream ...

  7. 【转】启动、停止Windows服务的DOS命令

    需要用管理员身份运行 在图形界面中启动.停止服务很方便,但是操作系统有时候会出故障,此时不妨使用原始的DOS命令启动.停止服务,也许会收到意想不到的效果的! 方法/步骤 1 开始→所有程序. 2 附件 ...

  8. C++中的“error:LNK2005 已经在*.obj中定义”异常问题

    C++中的“error:LNK2005 已经在*.obj中定义”异常问题 异常现象如下:

  9. node express session

    在express4.0版本以上,需要单独增加session模块:express-session:https://www.npmjs.com/package/express-session 具体做法是, ...

  10. Spring MVC深入讲解

    一.前言: 大家好,Spring3 MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 MVC了.Spring3 MVC结构简单,应了那句话简单就是美,而 ...