常用脚本学习手册——Bat脚本

我们在日常工作中常常会遇到一些需要重复进行的工作,又或者我们的项目在转交客户时需要去简化配置过程

这时我们就需要使用到一些自动化部署操作,我们常常会采用脚本来完成这部分功能

下面我们来介绍一种脚本类型Bat脚本,我们会从以下方面介绍:

  • 脚本介绍
  • Bat脚本基本语法
  • Bat脚本常用语法
  • Bat脚本进阶内容

脚本介绍

首先我们需要去简单了解一下脚本

脚本简介

首先我们需要知道脚本是什么:

  • 脚本是一种特殊文件,借助这种文件我们可以快速实现一些配置设置或快速启动某些部件

那么脚本具有什么优势:

  • 脚本的语言相对而言比较简单易学,可以快速掌握
  • 脚本可以使用任何文本文件编辑工具创建和修改,简单便捷
  • 脚本通过一次书写多次执行的方式来简化多次代码的书写,加快速度
  • 脚本可以提前设置执行方式,使我们在部署或其他方面简化操作,封装内部快速使用

那么市面上常见的脚本都有哪些:

  • python:目前比较常用的语言之一,这里推荐简单学习一下
  • Shell:Shell既是一种命令语言,又是一种 程序设计语言 ,也就是我们所说的脚本,以sh结尾的文件
  • Bat:Bat也是一种常见的脚本语言,具有低廉的学习成本,可以快速掌握并用于一些简单操作,双击执行即可

Bat脚本简介

首先我们需要先去了解一下Bat脚本:

  • Bat脚本是一种以.bat结尾的文件,可以直接双击点击使用即可

  • 全称batch脚本,也称批处理文件,是Windows系统默认支持的脚本语言

然后我们给出一个简单的Bat脚本,介绍一下基本格式:

REM 这是注释,@echo off表示关闭Bat脚本内容展示
@echo off REM set表示定义变量
set name=123 REM echo表示页面输出,%%中包含变量名可以使用变量
echo %name% REM goto:eof表示结束不再继续下面的内容
goto:eof

Bat脚本基本语法

下面我们会介绍Bat的基本语法内容

注释@和REM和::

首先我们介绍注释信息:

  • @:表示不显示本行信息,但是仍执行

  • REM:表示注释信息,该注释信息不会显示

  • "::":也表示注释信息,实际上":"加任意符号都可以表示无信息显示,但我们通常用::来表示注释

我们给出简单示例:

REM 我是注释

:: 我是注释

输出echo

首先我们来介绍echo的五种用处:

  • echo txt :直接输出语句
  • echo. : 表示换行符
  • echo text > txt文件 :将text覆盖在txt文件中
  • echo text >> txt文件 :将text追加在txt文件中
  • echo on/off: bat语句信息是否展示

我们给出简单示例:

REM 我们采用@来隐藏该行指令,这样本行就不会出现在界面
REM 我们使用echo off,那么我们后续的指令就不会出现在界面中
@echo off REM 正常输出语句
echo 123 REM 这里如果我们输出所拼接的字符串,直接拼接即可
echo hello world REM 表示换行符
echo. REM 表示将123写入t.txt文本中
echo 123 > t.txt REM 表示将456覆盖进t.txt文本中,这时文本内为456
echo 123 > t.txt REM 表示将789追加到t.txt文本中,这时文本内为789
echo 789 >> t.txt

暂停pause

我们先来简单介绍一个pause:

  • pause:用于暂时暂停界面,当我们输入其他信息时界面继续运行

我们常常会将其用于暂停页面查看信息:

REM 我们采用@来隐藏该行指令,这样本行就不会出现在界面
REM 我们使用echo off,那么我们后续的指令就不会出现在界面中
@echo off REM 我们查看一个较长的数据
echo 123 REM 我们可以在中途暂停查看数据,点击后查看下一个数据
pause REM 我们查看一个较长的数据
echo 456

标题title

我们简单介绍title:

  • title:可以用于设置该命令框的名称
  • 我们的bat命令其实就是一个cmd命令执行框,title会修改该框的名称

我们给出简单实例:

@echo off

REM 设置标题为this is a test
title this is a test

参数set

我们先来介绍一下set关键字:

  • set:通常用来定义变量,定义后该变量可以任意使用
  • 变量的使用通常采用%%包围该变量,表示使用该变量的内部数据

我们给出一个简单示例:

@echo off

REM set 后跟变量名=变量值,注意不能存在空格
set name=ScriptHome REM 然后我们可以采用%%去使用该数据
echo %name% REM 我们可以直接进行拼接
set age=18
echo %name%%age% REM set的变量值可以进行界面交互获取(set /P 变量名=提示信息)
set /P yourname=你的名字是: echo %yourname%

跳转goto

下面我们来介绍跳转关键字:

  • goto:goto后面可以跟位置关键字,用于跳转到对应的位置
  • goto通常配合:来使用,使用":名称"来定义跳转位置,然后使用goto:名称来进行跳转

我们给出一个简单实例:

:: goto展示

@echo off

REM 下述是一个死循环,我们正常使用时不能这样书写,下述会一直输出1

:top

echo 1

goto:top

:: goto:eof 表示结束,执行后就不会再执行后续命令

REM 下述命令只会执行1,不会执行2,因为在中间进行了中断

@echo off

echo 1

goto:eof

echo 2

其他功能

首先我们需要知道Bat脚本其实是基于cmd命令来实现的,所以我们首先给出window的一些常用命令:

windows命令行 功能描述 linux终端
cd 切换工作目录 cd
dir 列出当前文件夹下所有文件 ls [-lh]
type 查看文件内容 cat
md/mkdir 创建目录 mkdir
del 删除文件 rm
rd 删除目录 rm -r
copy/xcopy 拷贝 cp [-r]
cls 清屏 clear
findstr 根据关键字查找 grep
move/rename 移动/重命名 mv/rename
tasklist 查找进程 ps [-ef]
taskkill 杀死进程 kill [-9]

下面我们统一来介绍一些其他语法

::首先我们需要介绍一个Bat脚本中文乱码修复办法:使用 chcp 65001 命令行
::当然我们也可以在保存时手动选择为ANSI编码格式来解决中文乱码问题 @echo off
chcp 65001 set param1=hello
set param2=world REM 默认情况下可能会导致你好出现乱码状况,但是有chcp 65001相当于选择 ANSI 编码格式,可以修复乱码问题
echo %param1%%param2%你好 ::start可以调用同目录级别下的其他文件

Bat脚本常用语法

下面我们来介绍一些关于Bat的常用内容

常用系统变量

除了常用的符号我们还需要注意一些常用的系统变量:

REM 当前工作路径
%CD% REM 当前日期,格式为"星期日 DD/MM/YYYY"
%DATE% REM 当前时间,格式为"HH:MM:SS.SS"
%TIME% REM 一个从0~32767之间的随机数
%RANDOM% REM 之前的命令是否出错(出错为0,出错为1+)
%ERRORLEVEL% REM 当前登录用户名
%USERNAME% REM 当前用户的用户文件夹目录
%USERPROFILE% REM 当前用户的应用程序数据文件夹目录
%APPDATA%

常用符号介绍

首先我们来介绍Bat中常用的各类符号的功能

命令行回显屏蔽符@

命令行回显屏蔽符@的主要用途:

  • 关闭当前行的回显
  • ECHO OFF可以关闭掉整个批处理命令的回显,但不能关掉ECHO OFF这个命令,所以我们通常采用@来关闭ECHO OFF命令的回显

**批处理变量引导符% **

批处理变量引导符%的主要用途:

  • %%将变量名包围在里面可以表示变量
  • %%将变量名放在最后可以用于表示for的单个元素
  • %0表示该Bat脚本本身,通常可以用于复制文本或者其他的一些操作
  • %(19)表示在执行该Bat脚本时传入的19个参数,可以看作为输入的变量值,可以在bat脚本中使用

**重定向符> **

重定向符>的主要用途:

  • DOS的标准输入输出通常是在标准设备键盘和显示器上进行的,利用重定向,可以方便地将输入输出改向磁盘文件或其它设备
  • “>”:将命令发送到文件或设备,使用大于号“>”时,有些命令输出(例如错误消息)不能重定向
  • “>>”:将命令输出添加到文件结尾而不删除文件中已有的信息
  • “<”:从文件而不是键盘上获取命令所需的输入

**命令管道符| **

命令管道符| 的主要用途:

  • 格式:第一条命令 | 第二条命令 [| 第三条命令...]4
  • 将第一条命令的结果作为第二条命令的参数来使用,例如dir c:|find "txt"查找c盘下的txt文本

**转义字符^ **

转义字符^的主要用途:

  • ^是对特殊符号<,>,&的前导字符
  • 在命令中他将以上3个符号的特殊功能去掉,仅仅只把他们当成符号而不使用他们的特殊意义
  • 此外,^放在echo text的末尾可以表示续行符号,因为每行末尾还有一个看不见的符号,即回车符,所以^会将回车符失去意义

**组合命令& **

组合命令&的主要用途:

  • 语法:第一条命令 & 第二条命令 [& 第三条命令...]
  • 这个符号允许在一行中使用2个以上不同的命令,当第一个命令执行失败了,也不影响后边的命令执行

**组合命令&& **

组合命令&&的主要用途:

  • 语法:第一条命令 && 第二条命令 [&& 第三条命令...]
  • 用这种方法可以同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令

**组合命令|| **

组合命令|| 的主要用途:

  • 语法:第一条命令 || 第二条命令 [|| 第三条命令...]
  • 用这种方法可以同时执行多条命令,当一条命令失败后才执行第二条命令,当碰到执行正确的命令后将不执行后面的命令

Bat脚本进阶内容

下面我们来介绍Bat脚本中的一些进阶内容

函数

首先我们需要了解Bat脚本中的函数:

  • 函数由":"表示开始函数,同样后面带函数名(实际上类似于goto的跳转概念)
  • 由":函数名"来声明函数并书写函数内容,由"call:函数名"来调用函数并在调用结束后回到原位置执行

我们来给出一些简单的函数实例:

::首先我们先来声明函数

REM 声明两个函数

:method1
@echo hello :method2
@echo world REM 但实际上输出的结果会是helloworld,因为只要存在在bat中该代码都会被执行,所以我们需要一些命令避免执行 :: 我们会采用call来调用函数同时分段在末尾书写goto:eof来中断后续代码执行 REM 声明两个函数并调用第二个函数 @echo off call:method2
goto:eof :method1
@echo hello
goto:eof :method2
@echo world
goto:eof REM 那么我们只会执行world,因为call调用method2,然后method2末尾有goto:eof回到原位置执行第二个goto:eof结束bat文件

数组

下面我们来介绍一下数组:

  • bat的数组在某种意义上来说不能被称为数组,因为它无法通过下标访问
  • bat的数组可以通过set直接定义,一次定义一堆可以被称为数组,一次定义一个并标记下标也可以被称为数组

我们下面给出数组实例:

:: 我们首先给出基础数组

set arr=1,3,5,6,8

REM 这里是一个for循环,我们会在后续介绍,大致意思就是从arr数组种提取数据a,然后展示
for %%a in (%arr%) do (
@echo %%a
) :: 然后我们来展示带有下标的数组 set a[0]=1
set a[1]=3
set a[2]=5
set a[3]=7
set a[4]=9
set a[5]=11 REM 这里也是for循环,大致意思从0~5全部遍历一遍为n,然后去获得a[n]的值
for /l %%n in (0,1,5) do (
@echo !a[%%n]!
)

循环

我们这里介绍的循环是for循环:

  • 基本格式:FOR %%variable IN (set) DO command [command-parameters]

  • 其中%%variable表示我们获取的数组中的各个元素值

  • 其中set表示我们所定义的数组,有的可以是数组,有的可以是自定义的一些数据

  • 最后do(),()中书写所需要执行的for循环内容

我们需要注意的是针对不同的for循环参数具有不同的意义:

  • /D:只能显示当前目录下的目录名字
  • /R:可以把当前或者你指定路径下的文件名字全部读取
  • /L:该集表示以增量形式从开始到结束的一个数字序列
  • /F:使用文件解析来处理命令输出、字符串及文件内容

下面我们给出关于for循环的一些案例:

:: 基本循环语法

for [/d/l/r/f] %%i in () do (

)

:: 这里讲解一个知识点:\dir /b 指定目录\ 这个语法可以用于获得指定目录下的所有文件和文件夹

REM  %~dp0等同于%CD%,表示当前路径
set curdir=%~dp0test1\
for /f %%i in ('dir /b "%curdir%"') do (
echo %%i
) :: /d 表示获取某一目录下的所有文件夹 REM 表示bat同目录级下的所有文件夹
for /d %%i in (%cd%\*) do (
@echo %%i
) :: /l 可以使用一个序列来做循环,包含三个参数,第一个参数是开始值,第二个参数是跨步值,第三个参数是结束值 REM 例如下面我们会从1~10每隔两位输出,输出为1,3,5,7,9
for /l %%i in (1 2 10) do (
echo %%i
) REM 此外也可以实现倒数输出
for /l %%i in (10 -2 1) do (
echo %%i
) :: /r 可以获取某一个目录下所有的文件以及文件夹下的文件 REM 获得该目录下的所有文件及文件夹内的txt文本文件
for /r %%i in (*.txt) do (
@echo %%i
) :: /f 读取文件(下述的/表示换行) REM 例如我们的数据为:
REM ID NAME AGE
REM 1 zhang 18
REM 2 lisi 15
REM 3 wang 19 REM 读取user.txt文件并展示(默认只读取每行第一个空格前的信息)
REM 那么展示的数据就是ID /1 /2 /3
for /f %%a in (user.txt) do (
echo %%a
) REM 可以增加一个"delims="的参数,表示不分割读取每一行
REM 那么展示的数据就是ID NAME AGE /1 zhang 18 /2 lisi 15 /3 wang 19
for /f "delims=" %%a in (user.txt) do (
echo %%a
) REM 也可以采用"delims=分隔符"来将其分割输出,同时需要采用tokens设置获取几列数据
REM delims= 表示以空格作为分隔符;tokens=1-3表示获取第1~3列分别作为%%a,%%b,%%c来作为参数输出
for /f "tokens=1-3 delims= " %%a in (user.txt) do (
echo %%a - %%b - %%c
)

结束语

这篇文章中详细介绍了Bat脚本的优势和一些具体语法来帮助我们快速构建脚本,希望能为你带来帮助

附录

下面给出我学习和书写该篇文章的一些参考文章,大家也可以去仔细观赏:

  1. bat批处理脚本大全:bat批处理脚本大全_bat脚本_luffy5459的博客-CSDN博客

  2. 批处理文本脚本教程:超详细 批处理文件脚本(bat) 教程(持续更新)_bat脚本_哈森程序猴的博客-CSDN博客

  3. 【最全】BAT批处理脚本教程:【最全的】BAT 批处理脚本教程_bat脚本菜鸟教程_致守的博客-CSDN博客

常用脚本学习手册——Bat脚本的更多相关文章

  1. Git版本控制软件结合GitHub从入门到精通常用命令学习手册(转)

    简要参考:http://www.tuicool.com/articles/mEvaq2 http://gitref.org/zh/index.html GIT 学习手册简介 本站为 Git 学习参考手 ...

  2. [BAT脚本] 1、BAT脚本FOR循环操作文件和命令返回实例

    Wednesday, 31. October 2018 08:18PM - beautifulzzzz 一.需求 需要在windows上实现一个bat脚本解析json,将json转换为自己想要的key ...

  3. sh脚本学习之: sh脚本 、sed、awk

    sh脚本 sh命令的批处理文件,支持更复杂的逻辑. Shell中的变量 参数 $0 当前脚本路径 $1....$n 脚本执行对应的第n个参数 条件判断 文件判断 test [op] path e存在 ...

  4. shell脚本学习—Shell执行脚本

    Shell作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行这一条,这种方式称为交互式,但还有另一种执行命令的方式称为批处理方式,用户事先写一个Shell脚本,Shell可以一次把这些命 ...

  5. bat脚本基础教程

    bat脚本就是DOS批处理脚本,就是将一系列DOS命令按照一定顺序排列而形成的集合,运行在windows命令行环境上.本文主要介绍bat脚本基础语法,希望完成本文内容学习之后具备基础的bat脚本开发能 ...

  6. 【转贴】bat脚本基础教程

    bat脚本基础教程 https://www.cnblogs.com/linyfeng/p/8072002.html 自己动手太少了. bat脚本就是DOS批处理脚本,就是将一系列DOS命令按照一定顺序 ...

  7. Window脚本学习笔记之定时关闭进程

     定时关闭进程, 从字面上即可看出操作分为两个步骤,即: 1,结合“任务计划程序”,定时. “计算机->管理->计划任务程序”,作用是让系统定时启动脚本文件(bat脚本). 2,结合“nt ...

  8. 【转】Git版本控制软件从入门到精通学习手册

    GIT 学习手册简介 本站为 Git 学习参考手册.目的是为学习与记忆 Git 使用中最重要.最普遍的命令提供快速翻阅. 这些命令以你可能需要的操作类型划分,并且将提供日常使用中需要的一些常用的命令以 ...

  9. Bat 脚本学习 (基础篇)

    [转]Bat 脚本学习 2015-01-05 14:13 115人阅读 评论(0) 收藏 举报 基础部分: ============================================== ...

  10. bat脚本参数 if goto choice for使用的学习笔记。

    写过几次bat脚本,但一直没有总结,最近找到一个网页介绍bat,总结得很好,转自 http://www.jb51.net/article/49627.htm: 本文只总结我不会的,全面的看原网页就可以 ...

随机推荐

  1. springboot默认的json配置

    springboot默认的json配置 1.@JsonIgnore 返回前端时对应字段不进行序列化返回 public class User { @JsonIgnore private String n ...

  2. Graphics绘制图形

    List<double> labels = form.channelData2[kp.Key]; List<double> listY = kp.Value; int labe ...

  3. Java中String相关知识

    String 1.String概述 String代表字符串,Java程序中所有的字符串文字(例如'abc")都被实现为此类的实例,也就是说,Java中所有的双引号字符串都是String类的对 ...

  4. vscode 一些扩展的推荐(前端)

    - `Auto Rename Tag`:成对修改 HTML 标签名 - `Bracket Pair Colorizer`:括号匹配高亮 - `Color Highlight`:显示颜色代码的颜色 -  ...

  5. vue + vant 移动端适配

    1. 设置动态根字号大小,/public/phone-adapt.js,在index.html中引入 (function (doc, win) { const docEl = win.document ...

  6. Matlab字体设置中找不到字体的解决方法(转载)

    Matlab字体设置中找不到字体 Matlab默认的字体实在不好看,一般都需要重新设置字体. 在其字体设置中有些字体不能同时支持中文和英文,我在之前的博客中说过,如何为Matlab设置一款好看的同时兼 ...

  7. MAC完整的地址

    作者:匿名用户 链接:https://www.zhihu.com/question/22883229/answer/71280098 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...

  8. windows server 2008 创建计划任务不能正常执行

  9. 新搭建的禅道admin忘记密码

    /opt/zbox/run/mysql/mysql -uroot -p 禅道数据库root默认密码123456 MariaDB [(none)]> show databases; +------ ...

  10. Old ST-LINK firmware detected.do you want to upgrade it?升级固件

    一段时间没有使用st-link烧写程序了.打开keil5准备把程序烧写到stm32板子上时,报错Old ST-LINK firmware detected.do you want to upgrade ...