bat/cmd脚本开发

Posted dba-ivan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bat/cmd脚本开发相关的知识,希望对你有一定的参考价值。

  1. 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脚本开发的主要内容,如果未能解决你的问题,请参考以下文章

    转 BAT CMD 批处理文件脚本总结(中文)

    如何让bat,cmd文件后台运行?

    1.4.1bat脚本命令COPY 拷贝 复制到

    1.1.1bat脚本命令MD MKDIR 创建目录 创建文件夹

    1.3.1bat脚本命令RENAME REN 重新命名文件

    1.2.1bat脚本命令 DIR 显示磁盘目录与重定向符号 通配符