bat文件中常用的命令有:echo、@、rem、::、pause、goto、%、call、if、copy等。下面简要给出这几个命令的用法。
1. echo命令
echo 表示显示此命令后的字符。例如echoHello WorldchoHello World这条echo命令,在命令行中执行这条命令时,将在命令行中显示字符串:
echoHello World
HelloWorld
其中前面一个字符串“echo Hello World”表示执行的命令本身,后面的字符串“Hello World”表示这条命令的执行结果。
echo命令有个常用的组合命令“echo off”,表示此语句后所有运行的命令都不显示命令行本身,它与“@命令”的功能非常相似。即上面的例子“echo Hello World”这条echo命令中执行时不显示执行过程,也就是不显示命令本身“echo HelloWorld”,只显示命令执行结果“HelloWorld”。
2. @、rem、::、pause、goto命令
1)@命令
它的作用是让执行窗口中不显示它后面这一行的命令本身。它的作用和“echo off”的作用非常类似,只是“echo off”命令的作用域是整个脚本文件,而@命令只是紧接着它后面的那个命令。
例如一般的脚本文件都是一个“@echo off”命令开始的,这句命令表示不显示后面所有命令的执行过程,且“echo off”这句命令本身也不显示。
2)rem与::命令
rem表示是注释行。::也是注释命令,在批处理脚本文件中和rem命令等效,它后面的内容在执行时不显示,也不起任何作用,增加脚本的可读性。
3)pause命令
停止脚本文件命令,按任意键继续。
4)goto命令
和C语言的goto语句类似,跳转到相应的标号处执行。
3 . %命令
%表示变量的引用。
1)非for语句引用变量
例如下面的代码,执行下面的代码,首先将变量a设为123,之后引用变量a,程序将显示“123”,若不加“%%”,程序将认为a是一个字符串,显示字符串“a”。
@echo off
seta=123
echo %a%
2)for语句引用变量
for语句引用变量稍有不同,要加上两个“%%”。因为要与另外形式的外部变量%1 -%9区分开。
例如下面的语句,执行后将在命令行中打印“1 2 3 4 5”这几个数。
for %%iin (1 2 3 4 5 ) do echo %%i
4. call命令
call命令总结下来有下面的四种用法:
1)第一种用法
也就是最常用的一种用法,就是调用另一个批处理文件。
2)第二种用法
如果在被调用的批处理中面有参数,调用的时候需要在后面加上参数。
例如下面的批处理代码
a.bat内容:
echo %0 %1
b.bat内容:
call a.bat hello
dir c:\
pause
上面的例子将执行a.bat脚本文件打印出的内容为“a.bathello”。
在执行b.bat的时候,会将hello赋值给%1,而%0代表a.bat自己。在批处理中,在处理批处理文件后面最多可以带10个参数。使用%*代表所有参数%1-%9代表9个参数,%0代表批处理自己。
3)第三种用法
调用一个应用程序,例如call notepad.exe打开记事本。call可以这么用,但一般在调用应用程序的时候会使用start,很少用call。
4)第四种用法
调用本批处理中的一个标签。例如下面的有一个脚本语言:
@echo off
call :no1
start notepad.exe
exit
:no1
startcalc
执行该脚本文件时首先会调转到标号“:no1”出执行打开计算器程序,在接着执行调用call命令之后的代码打开记事本应用程序。
5. if 命令
if 表示将判断是否符合规定的条件,从而决定执行不同的命令。有三种格式:
1)if
语法: if [not] "参数" == "字符串" 待执行的命令。参数如果等于(not表示不等,下同)指定的字符串,则条件成立,运行命令,否则运行下一句。
Sample:if "%1" == "a"//表示第一个参数是够等于字符串“a”
2)if exist
if [not] exist [路径\]文件名。如果有指定的文件,则条件成立,运行命令,否则运行下一句。
Sample: ifexist config.sys edit config.sys 表示如果存在这文件,则编辑它
Sample:if exist config.sys type config.sys 表示如果存在这文件,则显示它的内容
3)iferrorlevelnumber
if [not]errorlevel <数字>待执行的命令。如果程序返回值等于指定的数字,则条件成立,运行命令,否则运行下一句。(返回值必须按照从大到小的顺序排列)
@echooff
XCOPYF:\test.bat D:\
IFERRORLEVEL 1 (ECHO 文件拷贝失败)
Else IFERRORLEVEL 0 ECHO (成功拷贝文件)
pause
很多DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态),称为错误码errorlevel或称返回码。常见的返回码为0、1。通过if errorlevel命令可以判断程序的返回值,根据不同的返回值来决定执行不同的命令。
6. copy命令
DOS下最常用的拷贝命令。命令格式如下:
COPY [/D][/V] [/N] [/Y | /-Y] [/Z] [/A | /B ] source [/A | /B]
[+ source[/A | /B] [+ ...]] [destination [/A | /B]]
命令参数解释如下:
source 指定要复制的文件。
/A 表示一个ASCII 文本文件。
/B 表示一个二进位文件。
/D 允许解密要创建的目标文件
destination为新文件指定文件夹和/或文件名。
/V 验证新文件写入是否正确。
/N 复制文件时,尽可能使用短文件名。
/Y 不使用确认是否要覆盖现有目标文件的提示。
/-Y 使用确认是否要覆盖现有目标文件的提示。
/Z 用可重新启动模式复制已联网的文件。
K60的BAT文件作用总结
总结一下,BAT文件下的5个文件其实功能可以归纳为两点。
1 将CW10.2集成开发环境下给出的参数(编译生成路径)生成并检查其路径的正确性。确保这个生成路径一定是存在的且是正确的。
2 将PSP和BSP工程用到的头文件都复制到文件生成文件夹下。其实这个很好理解,因为应用工程在编译时,最终定位的BSP和PSP工程的内容都是在生成文件夹LIB文件下去查找的。BSP和PSP工程中的.c文件都已经做到.a文件中了(CW10.2集成开发环境实现),但是熟悉.a文件的读者一定会知道,.a文件是不能包含.h文件(头文件)的,所以要将头文件手动加到LIB文件下。但是MQX毕竟是操作系统,其头文件不是一个两个那么少,所以用户手动复制的话会很麻烦,用户复制的时候也容易少复制文件,导致程序编译时不过。所以开发者将这些重复的复制操作变成脚本文件,“一步到位”省去了读者很多不必要的麻烦。
3. BAT文件的这6个脚本文件(MQX3.8版本共有6个脚本文件,以后的版本有可能会增加)是在BSP和PSP工程编译之前和编译之后执行的。其中“bsp_prebuild.bat”是在BSP编译之前调用的,“bsp_twrk60n512.bat”、“write_readme.bat”是在BSP工程编译之后调用的。“psp_cortex.bat”和“psp_twrk60n512.bat”是在PSP工程编译之后调用的。“verify_dir.bat”这个脚本文件为验证路径的正确性,是一个通用的脚本文件,编译前和编译后这两个过程中都有可能调用。
表101-1 工程下各个bat文件简明功能 | |
文件名 | 简明功能 |
bsp_prebuild.bat | 生成编译输出路径文件夹,删除上一次BSP工程编译生成的内容。 |
bsp_twrk60n512.bat | 复制BSP工程中所有用到的头文件至编译输出路径下。 |
write_readme.bat | 在编译输出路径文件夹下生成一个Readme文本文件。 |
psp_cortex.bat | 复制PSP工程中所有用到的头文件至编译输出路径下。 |
psp_twrk60n512.bat | 复制处理器特有的一些头文件至编译输出路径下。 |
verify_dir.bat | 验证路径是否正确和存在。 |