我们在日常工作中常常会遇到一些需要重复进行的工作,又或者我们的项目在转交客户时需要去简化配置过程
这时我们就需要使用到一些自动化部署操作,我们常常会采用脚本来完成这部分功能
下面我们来介绍一种脚本类型Bat脚本,我们会从以下方面介绍:
首先我们需要去简单了解一下脚本
首先我们需要知道脚本是什么:
那么脚本具有什么优势:
那么市面上常见的脚本都有哪些:
首先我们需要先去了解一下Bat脚本:
然后我们给出一个简单的Bat脚本,介绍一下基本格式:
REM 这是注释,@echo off表示关闭Bat脚本内容展示 @echo off REM set表示定义变量 set name=123 REM echo表示页面输出,%%中包含变量名可以使用变量 echo %name% REM goto:eof表示结束不再继续下面的内容 goto:eof
下面我们会介绍Bat的基本语法内容
首先我们介绍注释信息:
我们给出简单示例:
REM 我是注释 :: 我是注释
首先我们来介绍echo的五种用处:
我们给出简单示例:
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:
我们常常会将其用于暂停页面查看信息:
REM 我们采用@来隐藏该行指令,这样本行就不会出现在界面 REM 我们使用echo off,那么我们后续的指令就不会出现在界面中 @echo off REM 我们查看一个较长的数据 echo 123 REM 我们可以在中途暂停查看数据,点击后查看下一个数据 pause REM 我们查看一个较长的数据 echo 456
我们简单介绍title:
我们给出简单实例:
@echo off REM 设置标题为this is a test title this is a test
我们先来介绍一下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展示 @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的常用内容
除了常用的符号我们还需要注意一些常用的系统变量:
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中常用的各类符号的功能
命令行回显屏蔽符@的主要用途:
批处理变量引导符%的主要用途:
重定向符>的主要用途:
命令管道符| 的主要用途:
转义字符^的主要用途:
组合命令&的主要用途:
组合命令&&的主要用途:
组合命令|| 的主要用途:
下面我们来介绍Bat脚本中的一些进阶内容
首先我们需要了解Bat脚本中的函数:
我们来给出一些简单的函数实例:
::首先我们先来声明函数 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文件
下面我们来介绍一下数组:
我们下面给出数组实例:
:: 我们首先给出基础数组 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循环参数具有不同的意义:
下面我们给出关于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 )
本文作者:Gustav
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!