发布时间:2025-12-09 16:20:16 浏览次数:3
bat 是batch的缩写,直译为批处理。bat文件是存在于dos/windows中的脚本文件,bat的直接操作对象是dos命令,dos命令是system32下的exe或者cmd可执行程序的子集,长驻于内存中,具有简单、处理速度快的特点,取名为批处理毫无争议,也是非图形shell在windows操作系统中的直接体现,可以使用文本编辑器编写,保存为.bat格式。
bat的基本组成部分有数据类型、关键字、特殊符号、控制语句、命令、命令嵌套等。编制完整的bat脚本需要记忆较多的关键字、特殊符号,命令。当然,命令可以使用帮助查看。之后就是这些基本组成部分的搭配使用了。
一、开始 hello world
未能免俗,以hello world 开始。
@echo off
echo hello world
Pause
关键字echo 在DOS屏幕上有打印输出的功能,相当于高级编程语言的print(),参数有on,off。on 表示在从下一行开始命令行显示,off表示从下一行开始关闭命令行显示。
而关键字@则是关闭当前命令行显示的意思。
关键字pause表示DOS屏幕上暂停等待用户下一步操作。
echo hello the world
@echo hello the world
echo off
set var=this is my first program
set var=thanks
echo on
set var=hello the wold again
set var=this is my first program again
set var=thanks again
Pause
二、数据类型、变量
bat 的数据类型只有整型和字符型,无浮点型变量,这也注定了bat能够直接操作的数据类型非常少。当然bat也有数组,如创建一个含有1,2,3,4的数组。
set list=1 2 3 4
整型数据和字符型可以直接使用。
echo off
echo 10
echo this my first bat program
Pause
bat 的分为自定义变量、预定义变量和扩展变量,变量拼写不区分大小写。
1、自定义变量使用
自定义变量通过set 关键字赋值,变量类型有整型和字符型,无小数型变量。
set命令用于设置变量的值,加入参数/a为数值型,不加参数/a为字符型。加入/p表示等待用户在屏幕输入。
与高级程序语言不同的是,变量引用需要关键字%var%进行引用。
echo off
set var=hello the wold again
echo %var%
Pause
bat 算术运算符如下:
()-分组
! ~ - -一元运算符
* / % -算数运算符
+ - -算数运算符
<< >> -二进制逻辑移位
-二进制按位“与”
^ -二进制按位“异”
| -二进制按位“或”
= *= /= %= += -=-算数赋值
= ^= |= <<= >>=-二进制运算赋值
设置变量时,在关键字后加入参数/a,将变量引用的字符转化为数值型,可以进行相关的数学运算。如5+1=6:
echo off
set /a var=5
@rem 将var的值加1
set /a var=%var%+1
echo %var%
Pause
注:rem关键字表示注释,在命令行中无意义。
逻辑运算符写法稍微有点差异,使用 字符串界定符\"逻辑运算符\",反斜杆引号反斜杆引号
如:
set /a var= 1 \"\" 1 这样结果就显示出来了,其他逻辑或取余操作符用法
set /a var= 1 \"+\" 1 异运算
set /a var= 1 \"%\" 1取模运算
set /a var= 3 \"<<\" 2 左移位运算, 3的二进制为11,左移2位为1100,换成十进制就是12,自行验证
set /a var= 4 \">>\" 2右移位运算,4的二进制为100,右移动2位为1,结果为1
四、字符串处理
字符串处理一般有字符串的串联、替换、截取和查找等处理过程,常常用于文件名处理和文字编辑处理。
(1)字符串串联
字符串串联无需像高级语言一样使用运算符,只需要将不同字符串排列在一起即可。假设变量a为hello,b为world,a与b串联即为%a%%b%
@echo off
set a=hello
set b=world
set c=%a%%b%
echo %c%
Pause
(2)字符串替换
字符串替换本身具有搜索匹配的功能,如:%a:str1=str2%,本句的意思为将a字符串中含有字符串str1的字符串替换为str2
@echo off
set a=hello world
echo a replace before:%a%
set a=%a:hello=world%
echo a replace after:%a%
pause
(3)字符串查找
跟所有高级语言一样,bat也有自己的查找方式,且运用的通配符一致。通配符有?,*
通配符?条件查询,后面会跟单个字母,表示查询所有与之相关的字符串,并传递给其他变量
通配符*全文查询,查询所有字符串,并传递其他变量,
假定bat 文件放置于D:\Program Files\JetBrains\PyCharm 2017.1.4\bin文件夹下,
查询所有含有.dll后缀的文件:
@echo off
dir /b/s *.dll
Pause
(注:dir命令中/b表示没有标题信息,/s指定全路径名)
查询所有第二个字母含是i的文件名的文件
@echo off
dir /b/s ?i*.*
Pause
结果如下:
(4)字符串截取
字符串截取需要知道截取的起始位置和截取的字符串数目长度。
表示方法为:str:~m,n 其中:str表示要截取的字符串,m表示截取的起始位置,n表示截取的字符串长度,常有如下几种处理方式:
%a:~0,n%表示从字符串a取左边n位
%a:~-m%表示从字符串a取右边m位
%a:~m,n% 表示从字符串a从m+1位开始取n位
%a:~m,-n% 表示从字符串a,由m+1位开始,至倒数n+1位
%a:~m %表示从字符串a 由m+1位开始取右边全部。
从hello world中截取world字符
@echo off
set a=hello world
set b=%a:~6,5%
echo %b%
Pause
五 控制语句
bat控制语句有顺序语句、条件语句,循环语句三种。值得注意的是,在条件语句中,有一类比较特别的语句叫做跳转语句,使用关键字goto 与label配合使用。
1、顺序语句
2、条件语句
条件语句语法如下:
(1)单一条件:if(条件) do commend
(2)多重条件:if (条件A) (do commend a ) ELSE (do commend b)
(3)条件嵌套:if(条件A) if (条件B) do commend
以(3)举例:
@echo off
SET /A a=5
SET /A b=10
if %a%==5 if %b%==10 echo "The value of the variables are correct"
pause
跳转语句如下:
@echo off
set /a a=7
3、循环语句
bat脚本的for语句语法如下:
在cmd窗口中:for %I in (集合A) 条件a, do command
在bat文件中:for %%I in (集合A) 条件a do command
集合A表示I可以遍历的所有数据集,该数据集既可以是数组、文件夹、语句甚至于满足某种条件的集合,command表示满足条件时执行命令。该循环语句的含义为使用迭代变量I对集合A进行遍历,在遍历过程中,如果满足条件a,执行commend命令。
@echo off
set list=1 2 3 4 5
(for %%i in (%list%) do ( echo %%i ))
pause
六、特殊符号
特殊符号类型较多,部分是由于字母表示烦长、写法啰嗦原因而采取的简略手短。
1、@命令行回显屏蔽符
2、%批处理变量引导符
3、> 重定向符
4、>>重定向符
5、<、>、<& 重定向符
6、|命令管道符
7、^转义字符
8、组合命令
9、& 组合命令
10、||组合命令
11、\"\"字符串界定符
12、, 逗号
13、; 分号
14、() 括号
15、! 感叹号
16、批处理中可能会见到的其它特殊标记符: (略)
17、* ? 文件通配符
18、/ 参数开关引导符
19、: 批处理标签引导符
因篇幅所限,可以参考以下这篇文章:
https://blog.csdn.net/jhsword/article/details/95951847 windows中dos-批处理-命令特殊符号-通配符与转义符
七、函数
函数是组织在一起执行特定任务的一组语句。 在批处理脚本中,采用类似的方法将逻辑语句组合在一起形成一个函数。
像其他语言一样,批处理脚本中的函数也遵循相同的程序规则 -
每个函数都有一个函数名称,它描述了函数执行的任务。 要使用一个函数,需要用它的名称来“调用”这个函数,并传递与函数参数类型相匹配的输入值(称为参数)。函数调用使用call关键字:
@echo off
SETLOCAL
CALL :Display
pause
:Display
SET /a index=5
echo The value of index is %index%
bat命令分为内部命令和外部命令。
1、内部命令是指cmd.exe的内部命令,由于cmd.exe是windows操作系统的底层引导程序,所以内部命令长驻于内存中,内部命令有:
ASSOC 显示或修改文件扩展名关联。
ATTRIB 显示或更改文件属性。
BREAK 设置或清除扩展式 CTRL+C 检查。
BCDEDIT 设置启动数据库中的属性以控制启动加载。
CACLS 显示或修改文件的访问控制列表(ACL)。
CALL 从另一个批处理程序调用这一个。
CD 显示当前目录的名称或将其更改。
CHCP 显示或设置活动代码页数。
CHDIR 显示当前目录的名称或将其更改。
CHKDSK 检查磁盘并显示状态报告。
CHKNTFS 显示或修改启动时间磁盘检查。
CLS 清除屏幕。
CMD 打开另一个 Windows 命令解释程序窗口。
COLOR 设置默认控制台前景和背景颜色。
COMP 比较两个或两套文件的内容。
COMPACT 显示或更改 NTFS 分区上文件的压缩。
CONVERT 将 FAT 卷转换成 NTFS。你不能转换当前驱动器。
COPY 将至少一个文件复制到另一个位置。
DATE 显示或设置日期。
DEL 删除至少一个文件。
DIR 显示一个目录中的文件和子目录。
DISKPART 显示或配置磁盘分区属性。
DOSKEY 编辑命令行、撤回 Windows 命令并创建宏。
DRIVERQUERY 显示当前设备驱动程序状态和属性。
ECHO 显示消息,或将命令回显打开或关闭。
ENDLOCAL 结束批文件中环境更改的本地化。
ERASE 删除一个或多个文件。
EXIT 退出 CMD.EXE 程序(命令解释程序)。
FC 比较两个文件或两个文件集并显示
它们之间的不同。
FIND 在一个或多个文件中搜索一个文本字符串。
FINDSTR 在多个文件中搜索字符串。
FOR 为一组文件中的每个文件运行一个指定的命令。
FORMAT 格式化磁盘,以便用于 Windows。
FSUTIL 显示或配置文件系统属性。
FTYPE 显示或修改在文件扩展名关联中使用的文件类型。
GOTO 将 Windows 命令解释程序定向到批处理程序中某个带标签的行。
GPRESULT 显示计算机或用户的组策略信息。
GRAFTABL 使 Windows 在图形模式下显示扩展字符集。
HELP 提供 Windows 命令的帮助信息。
ICACLS 显示、修改、备份或还原文件和目录的 ACL。
IF 在批处理程序中执行有条件的处理操作。
LABEL 创建、更改或删除磁盘的卷标。
MD 创建一个目录。
MKDIR 创建一个目录。
MKLINK 创建符号链接和硬链接
MODE 配置系统设备。
MORE 逐屏显示输出。
MOVE 将一个或多个文件从一个目录移动到另一个目录。
OPENFILES 显示远程用户为了文件共享而打开的文件。
PATH 为可执行文件显示或设置搜索路径。
PAUSE 暂停批处理文件的处理并显示消息。
POPD 还原通过 PUSHD 保存的当前目录的上一个值。
PRINT 打印一个文本文件。
PROMPT 更改 Windows 命令提示。
PUSHD 保存当前目录,然后对其进行更改。
RD 删除目录。
RECOVER 从损坏的或有缺陷的磁盘中恢复可读信息。
REM 记录批处理文件或 CONFIG.SYS 中的注释(批注)。
REN 重命名文件。
RENAME 重命名文件。
REPLACE 替换文件。
RMDIR 删除目录。
ROBOCOPY 复制文件和目录树的高级实用工具
SET 显示、设置或删除 Windows 环境变量。
SETLOCAL 开始本地化批处理文件中的环境更改。
SC 显示或配置服务(后台进程)。
SCHTASKS 安排在一台计算机上运行命令和程序。
SHIFT 调整批处理文件中可替换参数的位置。
SHUTDOWN 允许通过本地或远程方式正确关闭计算机。
SORT 对输入排序。
START 启动单独的窗口以运行指定的程序或命令。
SUBST 将路径与驱动器号关联。
SYSTEMINFO 显示计算机的特定属性和配置。
TASKLIST 显示包括服务在内的所有当前运行的任务。
TASKKILL 中止或停止正在运行的进程或应用程序。
TIME 显示或设置系统时间。
TITLE 设置 CMD.EXE 会话的窗口标题。
TREE 以图形方式显示驱动程序或路径的目录结构。
TYPE 显示文本文件的内容。
VER 显示 Windows 的版本。
VERIFY 告诉 Windows 是否进行验证,以确保文件正确写入磁盘。
VOL 显示磁盘卷标和序列号。
XCOPY 复制文件和目录树。
WMIC 在交互式命令 shell 中显示 WMI 信息。
2、外部命令
外部命令是指在system32/system64下的cmd或者exe可执行程序,有时候我们在网上看的一些可执行程序似乎别人用时也是以外部命令执行,但是我们在计算机中使用的时候,计算机会告诉我们该程序既不是外部命令也不是内部命令,此时应该将该可执行程序拷贝至system32/system64目录下,从而计算机识别为外部命令,也就是所谓的外部命令扩展。如:我们常常使用的ping命令、nslookup命令、netstat命令就是外部命令。
1. calc-----------启动计算器
2. certmgr.msc----证书管理实用程序
3. charmap--------启动字符映射表
4. chkdsk.exe-----Chkdsk磁盘检查
5. ciadv.msc------索引服务程序
6. cleanmgr-------垃圾整理
7. cliconfg-------SQL SERVER 客户端网络实用程序
8. Clipbrd--------剪贴板查看器
9. cmd.exe--------CMD命令提示符
10. compmgmt.msc---计算机管理
11. conf-----------启动netmeeting
12. dcomcnfg-------打开系统组件服务
13. ddeshare-------打开DDE共享设置
14. devmgmt.msc--- 设备管理器
15. dfrg.msc-------磁盘碎片整理程序
16. diskmgmt.msc---磁盘管理实用程序
17. drwtsn32------ 系统医生
18. dvdplay--------DVD播放器
19. dxdiag---------检查DirectX信息
20. eudcedit-------造字程序
21. eventvwr-------事件查看器
22. explorer-------打开资源管理器
23. fsmgmt.msc-----共享文件夹管理器
24. gpedit.msc-----组策略
25. iexpress-------木马捆绑工具,系统自带
26. logoff---------注销命令
27. lusrmgr.msc----本机用户和组
28. magnify--------放大镜实用程序
29. mem.exe--------显示内存使用情况
30. mmc------------打开控制台
31. mobsync--------同步命令
32. mplayer2-------简易widnows media player
33. Msconfig.exe---系统配置实用程序
34. mspaint--------画图板
35. mstsc----------远程桌面连接
36. narrator-------屏幕“讲述人”
37. net start messenger----开始信使服务
38. net stop messenger-----停止信使服务
39. netstat -an----(TC)命令检查接口
40. notepad--------打开记事本
41. Nslookup-------IP地址侦测器
42. ntbackup-------系统备份和还原
43. ntmsmgr.msc----移动存储管理器
44. ntmsoprq.msc---移动存储管理员操作请求
45. odbcad32-------ODBC数据源管理器
46. oobe/msoobe /a----检查XP是否激活
47. osk------------打开屏幕键盘
48. packager-------对象包装程序
49. perfmon.msc----计算机性能监测程序
50. progman--------程序管理器
51. regedit.exe----注册表
52. regedt32-------注册表编辑器
53. regsvr32 /u *.dll----停止dll文件运行
54. regsvr32 /u zipfldr.dll------取消ZIP支持
55. rononce -p ----15秒关机
56. rsop.msc-------组策略结果集
57. secpol.msc-----本地安全策略
58. services.msc---本地服务设置
59. sfc /scannow---windows文件保护
60. sfc.exe--------系统文件检查器
61. shrpubw--------创建共享文件夹
62. sigverif-------文件签名验证程序
63. sndrec32-------录音机
64. Sndvol32-------音量控制程序
65. syncapp--------创建一个公文包
66. sysedit--------系统配置编辑器
67. syskey---------系统加密,一旦加密就不能解开,保护windows xp系统的双重密码 (慎用)
68. taskmgr--------任务管理器
69. tourstart------xp简介(安装完成后出现的漫游xp程序)
70. tsshutdn-------60秒倒计时关机命令
71. utilman--------辅助工具管理器
72. wiaacmgr-------扫描仪和照相机向导
73. winchat--------XP自带局域网聊天
74. winmsd---------系统信息
75. winver---------检查Windows版本
76. wmimgmt.msc----打开windows管理体系结构(WMI)
77. write----------写字板
78. wscript--------windows脚本宿主设置
79. wupdmgr--------windows更新程序
两种命令可以参考:https://blog.csdn.net/lijie45655/article/details/81806212
由于特殊字符和命令涉及的数量较多,平时使用时还是需要借助搜索引擎的。
九、小结
如同所有shell一样,bat 脚本具有简单、快捷的特点,但缺点也是明显的:不是图形化的、数据结构简单以及命令众多等等,远没有c/c++、java等高级编程语言那样赏心悦目。当然,shell脚本依然有着众多的拥护者,除去小部分黑客使用一些简单操作以外,在服务器端,为了服务器性能的需要,shell依然是一种非常常见的处理方式。也是因为部分老的使用者已经习惯了这样的处理方式,如果短时间做出改变,也是较为困难。如果不是硬件方面的诸多瓶颈,谁愿意用这样一种编码方式呢。