Windows批处理的应用(ProtoBuf编译自动化工具)
参考文章:https://www.xunjs.net/article/261993.htm
批处理概述
批处理,顾名思义就是可以批量处理,也称为批处理脚本,英译名为BATCH,后缀名.bat也是由此而来。他的构成没有固定的格式,只要遵循:每一行可视为一条命令,每条命令里可以含多条子命令,从第一行开始执行,直至最后一行结束,它运行的平台是DOS即可。批处理的特点:使用方便、灵活,功能强大,自动化程度高。
实例(ProtoBuf编译自动化工具)
下面使用构建一个将ProtoBuf源文件生成C++源文件以及C#源文件的自动化批处理工具为例。
首先准备生成好的proto.exe(ProtoBuf编译器,运行ProtoBuf源码即可生成)以及ProtoBuf源文件,如下:
资源链接:http://xiazai.xunjs.net/202209/yuanma/proto_xunjs.rar
紧接着,我们创建批处理文件(bat文件),如下:
TIPS:上述三个文件放同一个路径下即可运行生成。
定义内容如下:
rem命令是批处理文件中的注释,相当于C++中的//。
@echo off rem echo off:关闭回显,批处理中的每一条命令都不会显示在显示器上。而echo off本身也是一条命令,如果不想让其显示,只需在前方加@符号即可。 SET CURRENT_PATH=%cd% rem 注意,SET等号左右两边不能有空格 rem 将等号右侧的值赋值给等号左侧的变量; rem 使用%包裹的字符(字符串)是一个变量; rem %cd%:点击的bat脚本的工作路径(最开始点击的bat脚本所在的路径)。 SET PROTOC_PATH=%CURRENT_PATH% SET PATH=%PATH%;%PROTOC_PATH% rem 将PROTOC_PATH所指向的路径添加到系统PATH环境变量中去(并不会永久改变环境变量,是临时性的) set target_path=. echo 编译: player.proto cpp && "%PROTOC_PATH%\protoc.exe" --cpp_out="%target_path%/" --proto_path "./" player.proto rem echo + message,用来在DOS界面打印消息,类似于C语言的printf。 rem &&符号在第三部分:常用特殊符号中有介绍,不再叙述。 rem 由于一开始开启@echo off,而&&后面部分为一条命令(将ProtoBuf源文件编译为C++源文件,包括.h、.cc文件),则在DOS界面中是不会显示的,即@echo off的屏幕效果不会因为&&而失效。 echo 编译: player.proto csharp && "%PROTOC_PATH%\protoc.exe" --csharp_out="%target_path%/" --proto_path "./" player.proto rem 原理同上。 echo 操作完成,按任意键退出 echo 完成时间 %date:~0,10% %time:~0,8% rem %date:~0,10%是批处理中用于取日期的命令。~0,10%类似于字符串截取。 rem %time:~0,8%是批处理中用于取时间的命令。~0,8%类似于字符串截取。 pause>nul&exit rem pause是批处理中按任意键退出,但是由于会显示一行中文,故使用>nul,用于屏幕标准输出在屏幕上的显示,即“按任意键退出”该行中文不会显示在DOS界面中。&符号的作用在第三部分:常用特殊符号已经介绍。 rem exit命名用于退出DOS控制台,当我们按任意键退出时,执行exit。
效果演示
常用特殊符号
命令 | 含义 |
---|---|
@ | 命令行回显屏蔽符 |
% | 批处理变量引导符 |
> >> |
输出重定向 > 传递并覆盖 >> 传递并在末尾追加 |
< >& <& |
管道命令,一般不常用 |
| | 命令管道符 |
^ | 转义字符,将特殊符号 < 、 > 、 & 的特殊功能去掉 |
& && || |
组合命令,就是把多个命令组合起来当一个命令执行。 & 命令是顺序执行的,从前往后执行 && 可以同时执行多条命令,当碰到执行出错的命令后,将不再执行后面的命令 || 可以同时执行多条命令,当第一个命令执行失败后,才执行第二条命令,当碰到执行正确的命令后将不再执行后面的命令 |
“ ” | 字符串界定符号 |
, | 相当于空格 |
; | 当命令相同时,可以将不同的目标用 ; 来隔离,但执行效果不变,如果执行过程中发生错误,则只返回错误报告,但程序仍会执行 |
( ) | 小括号在批处理编程中有特殊的作用,左右括号必须成对使用,括号中可以包括多行命令,这些命令将被看成一个整体,视为一条命令行 |
! | 在变量延迟问题中,用来表示变量,即 %var% 应该表示为 !var! |
批处理(bat) %cd% 与 %~dp0的区别
- %cd%是指:点击的bat脚本的工作路径(最开始点击的bat脚本所在的路径)。
- %~dp0是指:当前执行的bat脚本所在目录(随着执行脚本的变化而变化)。
TIPS:%~dp0可以在A.bat的命令行中运行B.bat时,获得B.bat所在的路径。
批处理(bat)将路径添加到PATH环境变量中的两种方式
环境变量:通过在环境变量里面加入所需软件的安装路径(exe文件所在路径),当我们想运行某一软件时双击其快捷方式或者在DOS界面输入软件名称(命令),此时,计算机除了在其当前目录下寻找该软件的.exe文件之外,还在环境变量中搜索该软件的执行路径,找到,则运行。
永久添加
TIPS:该方式需要有管理员权限。
@echo off rem 设置要永久加入到path环境变量中的路径 set My_PATH=D:AppFolder set PATH=%PATH%;%My_PATH% reg add "HKLMSYSTEMCurrentControlSetControlSession ManagerEnvironment" /v "Path" /t REG_EXPAND_SZ /d "%PATH%" /f exit
临时添加
@echo off rem 设置要临时加入到PATH环境变量中的路径 set My_PATH=D:AppFolder set PATH=%PATH%;%My_PATH% rem 其它脚本命令todo pause