BAT脚本入门

一、概述

首先解决第一个问题,什么是BAT脚本?

  • BAT脚本也叫批处理文本,批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为 .bat 或 .cmd。在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们 。 使用批 处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任务。
  • BAT是运行在DOS系统之下,如我们常见的Windows。类似的还有shell脚本,是运行于Linux之下的。

二、BAT脚本常用指令解析

  1. echo 命令

    功能: 打开回显或关闭请求回显功能,或显示消息

    语法: echo [{on|off}] [message]

    echo on 表示在此语句后所有运行的命令都显示命令行本身
    echo off 表示在此语句后所有运行的命令都不显示命令行本身

    此两句的作用就是,我们可以选择是否将命令打印到终端上面。

    @与echo off相像,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。

  2. @ 命令

    功能: 表示不显示@后面的命令

    语法:@{命令}

    很多黑客程序在入侵过程中, (例如使用批处理来格式化敌人的硬盘)自然不能让对方看到你使用的命令啦 。

    example:

@echo off
echo hello world
如此,整个BAT脚本的命令不会在终端显示,但是会在终端打印 "hello world"
  1. rem 命令和::命令

    功能:表示此命令后的字符为注释,不执行。

    语法:放在你想要的注释的命令开头即可

    这两条条指令类似于C语言中的注释符"//",留给自己和他人参考使用,写注释等。

example:

@rem there is a warning!!
::there is a warning!!
  1. pause 指令

    功能:使程序挂起并且输出" Press any key to continue . . . "/如果才中问环境下会提示“请按任意键继续…”

    语法:单独使用,放在你想要使程序挂起的地方

    example:

    @echo off
    :begin
    echo I am a iron man
    pause
    goto begin
    

    这个例子使用到了类似于C语言中的goto语句的规则。如果你了解该语句可以看出这个脚本是一个死循环,像不像木马程序?

  2. goto 命令

    功能:跳转到指定标签,找到标签后程序将从下一行开始执行指令。

    语法: goto {label }(label是参数,指定所要跳转的位置) ,一般标签前会加":"表示该字母是一个标签,如 “:lable”。

    这里不给出例子了,可以参考上一个例子。

  3. call 命令

    功能:在一个批处理程序中调用另一个批处理程序,并且不终止父批处理程序。call 命令接收用作调用目标的标签。如果在脚本或批处理文件外使用 Call,它将不会在命令行起作用。

    语法: call [Drive:][Path] FileName [BatchParameters] [:label [arguments]

    [Drive:][Path] FileName : 指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名,即只能调用批处理程序。

  4. start 命令

    功能: 调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用

    语法:start [Path] FileName

    如:start C:\user\test.exe

    前面提到call命令只能调用另一个BAT脚本程序,而start则可以调用任何可执行程序。

  5. choice 命令

    功能: choice 使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提示可输入的字符,二者之间无空格。它的返回码为1234……

    语法: choice /lable:abc [tag1],[tag2],[tag3]

    choice命令为DOS或者Windows系统提供的外部命令,不同版本的choice命令语法会稍有不同,请用choice /?查看用法

    参数列表:
    /C choices 指定要创建的选项列表。默认列表是 “YN”。

    /N 在提示符中隐藏选项列表。提示前面的消息得到显示,
    选项依旧处于启用状态。

    /CS 允许选择分大小写的选项。在默认情况下,这个工具
    是不分大小写的。

    /T timeout 做出默认选择之前,暂停的秒数。可接受的值是从 0
    到 9999。如果指定了 0,就不会有暂停,默认选项
    会得到选择。

    /D choice 在 nnnn 秒之后指定默认选项。字符必须在用 /C 选
    项指定的一组选择中; 同时,必须用 /T 指定 nnnn。

    /M text 指定提示之前要显示的消息。如果没有指定,工具只
    显示提示。

    /? 显示帮助消息。

    注意:

    ERRORLEVEL 环境变量被设置为从选择集选择的键索引。列出的第一个选择返回 1,第二个选择返回 2,等等。如果用户按的键不是有效的选择,该工具会发出警告响声。如果该工具检测到错误状态,它会返回 255 的ERRORLEVEL 值。如果用户按 Ctrl+Break 或 Ctrl+C 键,该工具会返回 0的 ERRORLEVEL 值。在一个批程序中使用 ERRORLEVEL 参数时,将参数降序排列。

    example:

    @echo off
    choice /C dme /M "defrag,mem,end"
    if errorlevel 3 goto end
    if errorlevel 2 goto mem
    if errotlevel 1 goto defrag:defrag
    c:\dos\defrag
    goto end:mem
    mem
    goto end:end
    echo good bye
    

    此批处理运行后,将显示“defrag,mem,end[D,M,E]?” ,用户可选择d m e ,然后if语句根据用户的选择作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,批处理运行结束。

  6. if 命令

    功能: 表示将判断是否符合规定的条件,从而决定执行不同的命令

    语法:其语法有以下三种形式

    1. if “参数” == “字符串”  待执行的命令

      参数如果等于(not表示不等,下同)指定的字符串,则条件成立,运行命令,否则运行下一句。

      例:if “%1”==“a” format a:

    2. if [not] exist [路径]文件名 待执行的命令

      如果有指定的文件,则条件成立,运行命令,否则运行下一句。

      如: if exist c:\config.sys type c:\config.sys
      表示如果存在c:\config.sys文件,则显示它的内容。此处type指令用于显示指定文件的内容。

    3. if errorlevel <数字> 待执行的命令

      很多DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态),通过if errorlevel命令可以判断程序的返回值,根据不同的返回值来决定执行不同的命令(返回值必须按照从大到小的顺序排列)。如果返回值等于指定的数字,则条件成立,运行命令,否则运行下一句。

      如if errorlevel 2 goto x2

      其实这个更像一个出错处理机制,我们应在自己编写BAT脚本中多多使用这一形式。

      常和if搭配的几个运算符:

      EQU - 等于
      NEQ - 不等于
      LSS - 小于
      LEQ - 小于或等于
      GTR - 大于
      GEQ - 大于或等于

  7. for 命令

    功能: for 命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令。

    语法: FOR (%%variable|%variable) IN (set) DO command [command-parameters]

    %variable 指定一个单一字母可替换的参数,指定变量请用%%variable。
    (set) 指定一个或一组文件。可以使用通配符。
    command 指定对每个文件执行的命令。
    command-parameters 为特定命令指定参数或命令行开关。

    例如一个批处理文件中有一行:
    for %%c in (*.bat *.txt) do type %%c

    则该命令行会显示当前目录下所有以bat和txt为扩展名的文件的内容。

  8. set 命令

    语法:set [varible=[string]]

    功能:显示、设置或删除环境变量

    example:

    set VAR=before
    if "%VAR"=="before"(set VAR==afterif "!VAR"=="after"@echo if you see this it work
    )
    

    通过上面常用的10来个指令的介绍,我们在看大部分的BAT脚本的时候已经没有啥太大的压力了。但是要想更好的掌握BAT脚本,还有以下几点补充:

三、BAT批处理文件参数

  • 同Linux中shell脚本一样,BAT脚本也可以使用参数(相当于DOS命令的命令行参数),这需要用到一个参数表示符“%”。

    %[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。 当有多个参数时需要用shift来移动,这种情况并不多见,我们就不考虑它了。

    example:

@echo off
type %1
  • 将该脚本命名为type.bat,放在C盘的根目录下,那么当我们执行如下指令:C:>type a.txt

    %1就表示a.txt , %0就表示type本身。该指令就表示显示a.txt的内容。

    将上面的例子修改一下:

 @echo offtype %1format %2
  • 运行指令:C:>type a.txt D:\test

    上面这条例子,根据前面讲到的东西我们很容易就可以看出它的含义。

四、使用组合命令

  • 组合命令主要用到以下几种符号,利用组合命令我们可以将多条命令进行组合。从而提高脚本编写的灵活度和效率。
  1. &

    用法: 第一条命令 & 第二条命令 [& 第三条命令…]

    描述: 用这种方法可以同时执行多条命令,而不管命令是否执行成功 ,都继续往下继续执行,这个要和&&进行区分。

  2. &&

    用法: 第一条命令 && 第二条命令 [&& 第三条命令…]

    描述: 用这种方法可以同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令

    example:

    @format a.txt && type b.txt
    
  3. ||

    用法: 第一条命令 || 第二条命令 [|| 第三条命令…]

    描述: 用这种方法可以同时执行多条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令;

    这个方法就像我们在测试设备能否识别我们的某个指令,为了保险起见我们设置了多个指令,以确保我们的指令总有一个能被设备执行。

五、管道命令

  • 同Linux下环境一样DOS下的BAT脚本中也可使用管道命令
  1. | 命令

    用法: 第一条命令 | 第二条命令 [| 第三条命令…]

    描述:将第一条命令的结果作为第二条命令的参数来使用

  2. >、>>输出重定向命令

    描述: 将一条命令或某个程序输出结果的重定向到特定文件中, > 与 >>的区别在于,>会清除调原有文件中的内容后写入指定文件,而>>只会追加内容到指定文件中,而不会改动其中的内容

    管道命令在我们实际使用中很有用的,大家可慢慢体会。

    example:

    @echo off
    @echo hello > c:hello.txt
    @echo hello > c:welcome.txt
    @echo welcome >> c:welcome.txt
    

    此时我们会发现在hello.txt中,只有hello这一字符串,没有其他的内容,因为其他的内容都被清空了。

    在welcome.txt中,发现除了hello还有welcome。如此可体会一下二者的区别。

  3. <、>&、<&

    < 从文件中而不是从键盘中读入命令输入。
    >& 将一个句柄的输出写入到另一个句柄的输入中。
    <& 从一个句柄读取输入并将其写入到另一个句柄输出中。

    这几个还是很好理解的,可以写几个例子体会一下。

六、重定向操作

  • 介绍了管道操作就不得不介绍一下重定向操作。
  • 可以使用重定向操作符将命令输入和输出数据流从默认位置重定向到其他位置。输入或输出数据流的位置称为句柄。
  • 下表是常见的句柄:
句柄 句柄的数字代号 描述
STDIN 0 键盘输入
STDOUT 1 输出到命令提示符窗口
STDERR 2 错误输出到命令提示符窗口
UNDEFINED 3-9 句柄由应用程序单独定义,它们是各个工具特有的
  • 数字 0 到 9 代表前 10 个句柄。可以使用命令 Cmd.exe 运行程序,并对该程序前 10 个句柄中的任何一个句柄进行重定向。要指定要用的句柄,在重定向操作符之前键入该句柄的数字。如果未定义句柄,则默认的 < 重定向输入操作符是 0,而默认的 > 重定向输出操作符是 1。键入 < 或 > 操作符之后,必须指定数据的读写位置。可以指定文件名或其他现有的句柄。
  • 结合前边提到管道知识,我们如果想将错误打印到窗口,可使用如下的指令: 2>&1

七、总结

  1. 设置字体颜色和窗体大小

    设置字体颜色:COLOR 02 (0代表背景色,2代表前景色)

    常用的颜色请见下表:

    字号 颜色
    0 黑色
    1 蓝色
    2 绿色
    3 浅绿色
    4 红色
    5 紫色
    6 黄色
    7 白色
    8 灰色
    9 浅蓝色
    A 潜绿色
    B 浅蓝色
    C 浅红色
    D 浅紫色
    E 浅黄色
    F 亮白色

    设置窗体大小:MODE CON: COLS=宽度 LINES=高度

划重点

  • 经过前面的常用命令的介绍,你肯定还是会遇到一些没有见过的命令,没关系送你三招保命的技巧,当你遇到不认识的指令时可使用如下三板斧:

    1. [command] help

      就会显示该指令的详细信息,使用信息还用例子,当然比我这里讲的要好上很多,还不会出错。这个help就相当于Linux中的man命令。举个例子:set help

    2. [command] /?

      结合前面讲到的知识,我们可以推出此方法。将想要得到的命令的显示到当前窗口。

    3. help

      这个指令会显示DOS下常见的指令,如果不懂其用法,可以使用上面两个指令进行查看。可以去自己的命令行敲下该指令看看,下面截了个图:

      好啦,暂时就只有这么多了,如果后面发现还有遗漏的会再将其补充进来。

参考:
批处理脚本入门
批处理脚本教程
(这两篇文章中有部分有纰漏,在本文中做了修正)

Windows BAT脚本常用指令解析相关推荐

  1. windows bat脚本编写

    windows批处理 (cmd/bat) 编程详解 开始之前先简单说明下cmd文件和bat文件的区别:在本质上两者没有区别,都是简单的文本编码方式,都可以用记事本创建.编辑和查看.两者所用的命令行代码 ...

  2. windows .bat脚本检测文件更新,并复制

    最近需要检测文件夹中文件是否更新,然后复制到指定路径 ,使用的是windows  bat脚本 记录一下 ,代码如下 mkdir 001 002 003 004 005 006 007 008 009 ...

  3. bat脚本常用命令及亲测示例代码超详细讲解

    这篇文章主要介绍了bat脚本常用命令及亲测示例代码超详细讲解,在这里需要注意编辑bat文件请使用ANSI编码,不然容易出现中文乱码,需要的朋友可以参考下 目录一 1.语句注释 2.暂停 3.输出和换行 ...

  4. windows bat脚本注册成服务

    windows bat脚本注册成服务 絮叨:最近在使用derby数据库编写项目,但是单机版本只能当前项目连接derby,想要工具连接项目中的derby只能开启网络版模式,网络版模式服务启动方式是个ba ...

  5. windows bat脚本教程

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

  6. java 调用windows bat脚本

    当我们需要在java程序中调用外部程序,我们可用通过Runtime.exec()调用来完成. The class java.lang.Runtime features a static method ...

  7. 【Windows批处理】常用命令解析

    0.[背景]常用参数: /* Win XP实测,测试方法:echo %userprofile% */%systemdrive% -- C: %windir% -- C:\WINDOWS %userpr ...

  8. windows bat脚本编写_怎样在 txt 中用 2 行代码写出一个锁屏休息提醒脚本?

    锁屏 面对电脑,沉浸在工作中,往往忘记休息.长此以往,脊椎肯定受不了,造成驼背,对体态不好. 何不写一个小脚本,40 分钟锁一次屏,暗示你应该休息放松一下了? 新建 .txt 文档,命名随意,但后缀改 ...

  9. 超详细的bat脚本常用命令及亲测示例

    注意:编辑bat文件请使用ANSI编码(不然会出现中文乱码) 1.语句注释 rem命令行注释,可以回显(语句会在命令行中显示): ::两个冒号,效果同上,但不会回显.(冒号后加任意非字母数字字符都可起 ...

最新文章

  1. oracle 伪列访问序列,Oracle数据库对象,同义词、序列、视图、索引
  2. SpringBoot2.XX 产生的问题
  3. 美甲帮:玩转指甲上的大数据平台
  4. 2017 数据驱动大会赠票赠书名单出啦!
  5. 手淘H265编解码算法与工程优化
  6. 官方宣布:谷歌开发者中国网站正式发布!
  7. JQuery链式操作简单的菜单列表
  8. mysql 调用未定义函数_php – Wierd和Annoying错误:调用未定义的函数mysql_query()[复制]...
  9. P6793-[SNOI2020]字符串【广义SAM,贪心】
  10. 工作296:el-table使用
  11. 中国宠物经济创新发展研究报告
  12. vue 路由懒加载,组件异步加载
  13. Polymer元素和AngularJS指令有什么区别?
  14. window mysql 同步复制_Window环境下配置MySQL 5.6的主从复制、备份恢复
  15. 如何避免由 Web 字体引起的布局偏移
  16. origin拟合曲线
  17. 强化学习: 贝尔曼方程与马尔可夫决策过程
  18. 怎样制作Lrc歌词文件
  19. 小于等于、 大于等于Mybatis 、oracle
  20. Oracle用户被锁定问题

热门文章

  1. 国际项目管理师PMP证书,值得考嘛?
  2. Stripes注解官方释义
  3. android监听新安装应用,【转载】Android监听应用程序安装和卸载
  4. 专业苹果测试软件,Geekbench 5.4.0 专业的Mac跑分测试软件
  5. 用Scratch实现足球AI,撞进机器人世界杯
  6. 一键激活Windows 7
  7. 无源晶振匹配电容计算公式
  8. 阿里云CentOS 7服务器挂载数据盘
  9. Gavin老师Transformer直播课感悟 - 基于Transformer的Rasa Internals解密之全新一代可伸缩DAG图架构(四)
  10. 【分享】无法访问GitHub 访问GitHub 解决访问GitHub