Windows 批处理的应用小结(ProtoBuf编译自动化工具)

寻技术 Windows / 其他编程 2023年07月11日 159

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
关闭

用微信“扫一扫”