批处理学习日志
简介
批处理脚本运行于windows系统,以.bat
或.cmd
为后缀名,大致与Linux系统下的.sh
文件对应,可直接双击运行或在命令行中运行,运行环境基本为命令行环境。
批处理命令大致与命令行命令效果一致。批处理命令不区分大小写。
常见功能
- 可以可以读取用户的输入,以便进一步处理。
- 有控制结构: for ,if , while 和switch
- 更好的自动化和脚本支持高级功能,如函数和数组
- 支持正则表达式
- 可以包含其他编程代码,如Perl。
常用DOS命令
echo
显示字符串。
批处理脚本默认在运行时显示其命令。在命令前加@
以取消显示。
使用
1 | echo off |
取消显示之后的命令,但会显示该命令本身,故一般与@
搭配使用
1 | @echo off |
从而取消显示脚本的命令。
rem
注释。以rem
开头的行被视为注释,执行时自动忽略,但可以回显(回显即脚本运行时显示其命令)。
补充
:
也可用于注释。
- 任何以冒号:开头的字符行,在批处理中都被视作标号,而直接忽略其后的所有内容。
- 有效标号: 冒号后紧跟一个以字母数字开头的字符串,goto 语句可以识别。
- 无效标号: 冒号后紧跟一个非字母数字的一个特殊符号,goto 无法识别的标号,可以起到注释作用,所以*
::
常被用作注释符号*。
::
后的字符行在执行时不会回显。
变量
引用
将变量名包含在%
进行引用。
如
1 | echo %massage% |
输出massage
变量的值。
传入参数
批处理执行时可传入参数,在脚本中使用%1
、%2
、%3
等进行调用。
例如:
a.bat:
1 | @echo off |
运行:
1 | a.bat 1 2 |
set
使用set
命令给变量赋值。
1 | set [/A] [variable]=[value] |
- /A:若该变量的值为数值,则使用该参数
- varible:变量名
- value:变量值
- 注意等号左右不要有空格
例如:
add.bat:
1 | @echo off |
则运行add.bat
可得:
1 | 3 |
作用域
全局变量
默认情况下,变量作用域为整个命令提示符会话。
局部变量
调用SETLOCAL
命令。
在调用SETLOCAL
之后,变量赋值在调用ENDLOCAL
、EXIT
或执行到脚本的文件末尾(EOF)时都会返回。
环境变量
同正常变量调用方式。
字符串
DOS中,字符串为一个有序的字符集合。
创建字符串
使用set
命令,如:
1 | @echo off |
空字符串
可通过如下方式创建空字符串(在命令行中似乎无法通过该方式创建空字符串):
1 | set a= |
可在方括号中包含变量名,并将其与方括号中的值进行比较。
通过该方式可判断空字符串:
1 | if [%a%]==[] echo string a is empty |
字符串连接
使用set
命令后跟多个字符串(也可为数值变量)即可完成拼接。
例如:
1 | @echo off |
字符串长度
无特定函数,可通过自定义函数实现。
1 | @echo off |
字符串提取
使用~
,形如:
1 | %str:~[num1],[num2]% |
提取从$[[num1],[num2])$的字符串(从0开始)
也可使用负数,表示从末尾开始计算,[num2]
可以缺省,缺省时一直截取到字符串末尾。
例如:
1 | @echo off |
将输出
1 | Hello |
替换字符
使用=
,形如:
1 | %str1:[sub_str1]=[str2]% |
将字符串str1
中的所有[sub_str1]
替换为[str2]
。
可以用于删除字符。
例如:
1 | @echo off |
数组
没有专门的数组类型,但可通过逐个定义来实现,所以严格意义上是用类似方式命名的一系列变量集合。