参考:
https://www.cnblogs.com/dirgo/p/18108455
https://blog.csdn.net/AnChenliang_1002/article/details/131288871
https://www.cnblogs.com/jingxian666/p/16814375.html
什么是BAT
全称即Batch,批处理,是一类可执行的文本文件,扩展名为.bat。
注意:BAT脚本文件为ANSI编码(否则出现中文乱码)
常用命令与语法
1、注释
rem注释时,不执行后面的语句,但会显示;
:: 注释内容(第一个冒号后也可以跟任何一个非字母数字的字符)
%注释内容%(可以用作行间注释,不能出现重定向符号和管道符号)
@echo off
rem 注释1
echo 11
::注释2
echo 22
%注释3%
echo 33pause::结果
11
22
33
请按任意键继续. . .
2、开启关闭回显
@置于语句前则该条语句不会回显(无视echo on)
echo off关闭回显功能,直到出现echo on,但其本身会回显,往往和@一起使用,即@echo off(关闭所有回显功能)
echo 11pause::结果
C:\Users\ab225\OneDrive\桌面>echo 11
11C:\Users\ab225\OneDrive\桌面>pause
请按任意键继续. . .@echo off
echo 11pause::结果
11
请按任意键继续. . .
1、help
和/?
都可以用来查看某个指令的帮助文档。
语法格式:指令 /?或者是help 指令
如title /?,就是打印title这个指令的帮助文档。
需要注意,单独执行help,会打印出支持的所有指令以及简单的功能说明。
2、title
语法格式:title window_name
作用设置当前的cmd窗口标题
3、color
语法格式:color 16进制颜色格式
用来设置批处理控制台的背景和字体颜色,颜色属性由两个十六进制数字组成,第一个数字表示背景颜色,第二个数字表示字体颜色。
如color 07表示常规的黑底白字。
每个数字可以为以下值:
0=黑色
1=蓝色
2=绿色
3=湖蓝色
4=红色
5=紫色
6=黄色
7=白色
8=灰色
9=淡蓝色
A=淡绿色
B=淡浅绿色
C=浅红色
D=淡紫色
E=淡黄色
F=亮白色
4、mode
一般用来调整当前命令行窗口的大小、代码页等。
如:mode con cols=113 lines=15 & color 0A
就是调整窗口的长是113个字符,宽是15个字符,顺带给窗口换了换颜色,一般会放在最前面执行。
可以通过在cmd窗口中输入mode /?来查看详细功能。
5、echo
语法格式:
echo [{on|off}] [message]
on:允许批处理文件在处理时回显命令;
off:不允许。
在调用了echo off之后,接下来执行的所有命令都将不会在前台打印出命令本身。
使用on
::代码
echo on
dir
echo 111111::输出
C:\Users\ab225\OneDrive\桌面>echo on
C:\Users\ab225\OneDrive\桌面>dir驱动器 C 中的卷是 Windows-SSD卷的序列号是 4CF7-0463
C:\Users\ab225\OneDrive\桌面 的目录
2024/08/03 13:08 <DIR> .
2024/05/07 22:35 <DIR> ..
2024/08/03 13:09 34 1 - 副本.bat
2024/07/24 22:51 62 1.sql
2024/07/08 10:08 5,781 11.ini
2023/04/04 20:43 30 122.185.bat
2024/05/20 10:04 28 14.17 - 副本.bat
2024/07/24 22:15 9,686 2.sql
2022/03/10 09:00 29 200.14.bat
2023/06/01 22:33 651 aardio.lnk
...(省略)43 个文件 52,827 字节4 个目录 27,495,849,984 可用字节C:\Users\ab225\OneDrive\桌面>echo 111111
111111
使用off
可以看到,除了第一行命令外,其他命令本身都没有被打印出来
echo off
dir
echo 111111
pause::输出C:\Users\ab225\OneDrive\桌面>echo off驱动器 C 中的卷是 Windows-SSD卷的序列号是 4CF7-0463C:\Users\ab225\OneDrive\桌面 的目录2024/08/03 13:08 <DIR> .
2024/05/07 22:35 <DIR> ..
2024/08/03 13:14 35 1 - 副本.bat
2024/07/24 22:51 62 1.sql
2024/07/08 10:08 5,781 11.ini
2023/04/04 20:43 30 122.185.bat
2024/05/20 10:04 28 14.17 - 副本.bat
2024/07/24 22:15 9,686 2.sql
2022/03/10 09:00 29 200.14.bat
...(省略)43 个文件 52,828 字节4 个目录 27,497,222,144 可用字节
111111
6、@
@可以加在一行命令的行首位置,表示禁止当前行命令本身回显在屏幕上
如:@echo on
相比使用echo on|off来控制整个脚本层级的回显,@可以更方便的控制行级的回显。
echo off
echo 111111
pause:: 结果
C:\Users\ab225\OneDrive\桌面>echo off
111111
请按任意键继续. . .::使用 @
@echo off
echo 111111
pause::结果
111111
请按任意键继续. . .
7、pause
用于暂停批处理的执行,由用户决定是否继续执行。
会显示"按任意键继续。。“,同时卡住不再继续执行,除非用户点击了任意键之后,才会继续执行。
如果你不想让界面显示"按任意键继续。。”,但还想要让界面卡住不向下执行,则可以结合重定向符来实现
::使用 @
@echo off
echo 111111::结果
111111
(窗口一闪而过)::使用pause
@echo off
echo 111111
pause::结果
111111
请按任意键继续. . .::不显示 “请按任意键继续. . .”
@echo off
echo 1
pause
echo 2
pause > nul
echo 3::结果:显示1后,按任意键,再显示2,再按任意键,显示3,然后窗口迅速关闭
1
请按任意键继续. . .
2
3
8、call
语法:
CALL [path] filename[.bat] [arguments]
[path] 是可选的,指定要调用的文件的路径如果与主批处理文件在同一目录下,则可以省略);
[filename]是要调用的批处理文件的名称;
[arguments] 是传递给被调用脚本的参数(如果有的话)。
1、调用其他的批处理文件
语法是:
call xxx.bat
①、无参调用
:: 主批处理文件(MainBatch.bat)
@ECHO OFF
ECHO 主批处理文件开始执行。
CALL SubBatch.bat
ECHO 主批处理文件执行完毕。
PAUSE:: 子批处理文件(SubBatch.bat)
@ECHO OFF
ECHO 子批处理文件被调用。
PAUSE::输出
主批处理文件开始执行。
子批处理文件被调用。
请按任意键继续. . .
主批处理文件执行完毕。
请按任意键继续. . .
②、带参调用
:: 主批处理文件(MainBatch.bat)
@ECHO OFF
ECHO 主批处理文件开始执行。
CALL SubBatch.bat Arg1 Arg2
ECHO 主批处理文件执行完毕。
PAUSE:: 子批处理文件(SubBatch.bat)
@ECHO OFF
ECHO 子批处理文件被调用,参数1=%1,参数2=%2
PAUSE::输出
主批处理文件开始执行。
子批处理文件被调用,参数1=Arg1,参数2=Arg2
请按任意键继续. . .
主批处理文件执行完毕。
请按任意键继续. . .
2、定义和调用批处理子例程
:: 主批处理文件(MainBatch.bat)
@ECHO OFF
ECHO 主批处理文件开始执行。
CALL :RunSubBatch Arg1 Arg2
ECHO 主批处理文件执行完毕。
PAUSE:: 子批处理文件中的标签调用
:RunSubBatch
ECHO 子例程被调用,参数1=%1,参数2=%2
GOTO :EOF::结果
主批处理文件开始执行。
子例程被调用,参数1=Arg1,参数2=Arg2
主批处理文件执行完毕。
请按任意键继续. . ..
1和2 可以一起用
3、使用CALL实现函数式编程
通过使用标签(Labels)和GOTO命令,我们可以在批处理中模拟函数的调用和返回。
@ECHO OFF
CALL :MyFunction
PAUSE
GOTO :EOF:MyFunction
(
ECHO 这是一个使用CALL实现的"函数"。
echo "多行命令需要用括号,没有则不需要"
):: 结果
这是一个使用CALL实现的"函数"。
"多行命令需要用括号,没有则不需要"
请按任意键继续. . .