导读
BAT脚本提供了一种快速且有效的自动化方式,使用户能够更轻松地处理大量的任务,并且可以根据需要自由地调整和修改脚本。本讲简要介绍了批处理技术及其常用命令。本篇教程主要对批处理技术的语言特点和编程思路进行重点讲解。
RflySim平台更多学习资料见:https://doc.rflysim.com
平台使用篇 | 批处理(bat)脚本使用教程(二)
1.help帮助命令
在BAT脚本中,可以使用“help”命令来获取帮助。
用法如下:在命令行窗口中输入“help”,将显示所有可用的Windows命令和相关信息。
若要了解特定命令的详细信息,可以在命令行中输入“命令名称 /?”,例如“DIR /?”将显示有关DIR命令的详细信息。还可以使用“help”命令查找某个功能或主题,例如“help for”将显示与“FOR”循环命令有关的帮助信息。
需要注意的是,某些命令可能不支持/help或/?选项。此外,在BAT文件中,不会显示“help”输出。如果需要在BAT文件中添加帮助,请在脚本中编写相应的文本,并在需要时将其输出到屏幕上。
2.SET命令
在BAT脚本中,SET命令用于定义变量、显示变量值、删除变量等操作。
具体来说,SET命令可以完成如下操作:
(1) 定义新的变量:例如,SET var=value将创建一个名为var的新变量,并将其值设置为"value"。
(2) 显示变量值:例如,ECHO %var%将输出变量var的值。
(3)修改现有变量的值:再次使用SET命令将会覆盖之前设置的变量值。
(4)删除变量:使用SET命令及其参数,例如SET var= 或 SET var=0,可以删除已经定义的变量var。
需要注意的是,SET命令定义的变量如需进行数学运算,需加上'/a'将之后的变量转为ASCII码,例如'SET /a S2=1+1'
3.ECHO打印命令
ECHO命令用于在命令行窗口输出文本。
其基本语法为:ECHO [text] 其中,text为要输出的文本字符串。
下面是一些常见的ECHO命令用法:
(1) 输出文本字符串 ECHO Hello, world! 将输出文本字符串"Hello, world!"。
(2)打印空白行 ECHO. 输出一个空白行。
(3)显示变量值 SET var=value
ECHO %var% 将显示变量var的值(即"value")。
注意,在BAT脚本中使用ECHO命令时,如果要显示变量值,必须在变量前后加上’%‘。
4.goto 命令
goto命令用于无条件地转移到指定标签处执行代码。
其基本语法如下:goto :label 其中,":label"表示要转到的标签名称,它必须与脚本中已定义的某个标签名称相匹配。
示例:
:begin
ECHO Please put a new disk into driver A
goto begin
注:上述程序会产生死循环
5.pause命令
pause命令用于暂停批处理文件的执行,等待用户按下任何键后继续执行。
可以使用以下语法:pause
当批处理程序运行到该命令时,程序将停止执行,直到用户按下任意键为止。在用户按下键之前,程序不会继续执行。这通常用于提示用户进行某些操作或者给用户更多时间来阅读屏幕上的信息。
6.call 命令
all命令通常用于调用另一个批处理文件或标签(label)。
它的语法如下:
call :labelname
call filename.bat
其中,:labelname 是要调用的标签名,filename.bat是要调用的批处理文件名。当使用call :labelname命令时,它将跳转到当前批处理文件中名为 :labelname 的标签所在的位置,并开始执行该标签以下的代码。当执行完被调用的标签代码后,程序将回到call命令的下一条语句继续执行。而当使用call filename.bat命令时,它会打开并运行指定的 .bat 文件。执行完成后,程序将返回到原始的批处理文件,继续执行该文件中的下一条命令。
运行示例:
call test.bat
call C:\PX4PSP\RflySim3D\RflySim3D.exe
按任意键后调用RflySim3D窗口
7.start 命令
在 BAT脚本中,start 命令用于启动一个新的窗口以运行指定的程序或者文件。
其语法如下:
start ["窗口标题"] [/d 目录] [/i] [/min] [/max] [/separate | /shared] [/low | /normal | /high | /realtime] [/wait] [/b] [程序/文档名] [参数]
其中:"窗口标题":可选参数,用于设置新窗口的标题。/d 目录:可选参数,用于设置新窗口的默认目录。/i:可选参数,表示要求新窗口运行程序时候使用新的进程。/min:可选参数,表示要求新窗口最小化。/max:可选参数,表示要求新窗口最大化。/separate 或 /shared:可选参数,表示启动程序时新进程是否与调用它时的进程共享环境变量等。/low、/normal、/high 和 /realtime:可选参数,表示了新程序的优先级别。/wait:可选参数,表示原始批处理文件将一直等待,直到启动的程序退出。/b:可选参数,表示不等待程序执行完毕就返回。
start 命令非常灵活,并且可以让我们在脚本中启动其他的应用程序和文件,同时允许我们控制新窗口的位置、大小和状态等等。
运行示例:
start test.bat
start C:\PX4PSP\RflySim3D\RflySim3D.exe
注:call命令主要用于在当前批处理文件中调用其他批处理文件或函数,并等待其执行结果;
start命令主要用于启动外部程序或脚本,并立即返回到当前批处理文件执行后续命令。
8.copy命令
在BAT脚本中,copy命令用于将一个或多个文件从一个位置复制到另一个位置。
其基本语法如下:
copy 源文件 目标文件
其中,源文件是带有完整路径和文件名的文件,目标文件是指定了复制后文件的路径和名称。可以使用以下参数对copy命令进行进一步配置:/a:表示复制时保留文件的原始属性;/v:比较源和目标文件是否完全相同;/y:复制时不询问是否覆盖目标文件,直接覆盖;/-y:复制时询问是否覆盖目标文件;/z:可在网络上的非NTFS分区上传输文件时继续复制。同时,还可以使用通配符(*)来批量复制文件,例如:copy *.txt C:\backup 这个命令会将当前目录下所有的以 .txt 结尾的文件复制到 C:\backup 目录中。值得注意的是,如果目标文件存在,则copy命令默认情况下会询问是否需要覆盖目标文件,因此可以通过 /y 或 /-y 参数来控制覆盖行为。
将平台里的DLL文件和已建模好的一些三维场景拷贝到CopterSim或者RflySim3D 里都要用 copy 命令
9.if命令
if命令是BAT脚本中的一个条件语句,用于在执行批处理文件时根据不同的条件执行不同的操作。其基本语法如下:
if condition command
其中,condition 是要判断的条件,command 是在条件满足时要执行的命令。
示例:将指定目录下的DLL文件复制到另一个目录中(截取自平台软件在环脚本)
SET PSP_PATH=C:\PX4PSP
SET DLLModel=AircraftMathworks
SET /A DLLModelVal=DLLModel
if %DLLModelVal% NEQ %DLLModel% (
copy /Y "%~dp0"\%DLLModel%.dll %PSP_PATH%\CopterSim\external\model\%DLLModel%.dll)
AircraftMathworks.dll文件不存在于目标文夹%PSP_PATH%\CopterSim\external\model\中时:变量DLLModelVal赋值为0,与DLLModel不等
其中"%~dp0" 为自动读取当前目录下的路径
10. for 命令
for命令是BAT脚本中的一个循环语句,可以遍历一组数据并对每个数据执行相同的操作。
其基本语法如下:
for %%variable in (SET) do command [command-parameters]
其中,%%variable是一个占位符,表示在循环过程中被赋予当前迭代的数值;(SET)是要循环的一组数据,可以是文件名、目录名或字符列表;command是需要执行的命令,command-parameters是传递给该命令的参数。
示例:列举出识别到的端口(取自平台硬件在环脚本)
SET PSP_PATH=C:\PX4PSP
for /f "delims=" %%t in ('%PSP_PATH%\CopterSim\GetComList.exe 0') do SET ComNameList=%%t
ECHO %ComNameList%
插入飞控后可识别端口号
11.SET命令
choice命令是一个用于在bat脚本中提供菜单交互式选择的命令。它可以用于让用户从指定的一组选项中选择一个,并将选择结果返回给批处理程序。
ECHO 1. dir
ECHO 2. ping
ECHO 3. netstat
SET /p command=请输入数字:
if %command%==1 (
dir
) else if %command%==2 (
ping www.baidu.com
) else if %command%==3 (
netstat -ano
) else (
ECHO 无效的输入
12.tasklist命令
tasklist命令允许用户查看当前正在运行的进程列表并了解与每个进程相关联的信息,如进程ID、内存占用等等。
tasklist命令的基本语法如下:
tasklist [/s computer] [/u domain\user /p password] [/m [module] | /svc | /v] [/fi filter] [/fo format] [/nh]
其中,/s 参数用于指定要查询任务列表的远程计算机;/u 和 /p 参数用于指定用于连接到远程计算机的用户凭据;/m module 参数允许您过滤显示进程和其模块的映像名称;/svc 参数会显示每个服务名、显示名称以及组件名称或DLL名称的进程;/v 参数会显示更详细的输出信息;/fo 参数允许您指定要生成的输出格式,默认为表格格式;/nh 参数允许您省略表头。
示例:
tasklist //显示当前所有进程
tasklist|find /i "RflySim3D.exe" && taskkill /im "RflySim3D.exe" start C:\PX4PSP\RflySim3D\RflySim3D.exe//找到并重启RflySim3D.
其中,find 命令用于在输出结果中搜索特定的字符串,并将包含该字符串的行输出到标准输出。