pause | 暂停批处理的执行并在屏幕上显示"请按任意键继续…" |
---|---|
echo | 显示指令,会把需要显示的内容展示出来。 |
echo off | 在此语句后所有运行的命令都不显示命令行本身,但是本身的指令是会显示出来的。 |
@ | 不显示本行命令行 |
call | 调用另一个批处理文件(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令) |
start | 启动单独的“命令提示符”窗口来运行指定程序或命令。 |
start命令包含有参数,如下:
"title" 指定在“命令提示符”窗口标题栏中显示的标题。
/dpatch 指定启动目录。
/i 将 Cmd.exe 启动环境传送到新的“命令提示符”窗口。
/min 启动新的最小化窗口。
/max 启动新的最大化窗口。
/separate 在单独的内存空间启动 16 位程序。
/shared 在共享的内存空间启动 16 位程序。
/low 以空闲优先级启动应用程序。
/normal 以一般优先级启动应用程序。
/high 以高优先级启动应用程序。
/realtime 以实时优先级启动应用程序。
/abovenormal 以超出常规优先级的方式启动应用程序。
/belownormal 以低出常规优先级的方式启动应用程序。
/wait 启动应用程序,并等待其结束。
/b 启动应用程序时不必打开新的“命令提示符”窗口。除非应用程序启用 CTRL+C,否则将忽略 CTRL+C 操作。使用 CTRL+BREAK 中断应用程序。
如果不加参数,则只开启新的窗口来执行命令。
%0-%9 | %0是指批处理文件的本身,%1-%9是传入的参数。这个参数是从批处理外传入的。 |
---|---|
choice | 使用此命令可以让用户输入一个字符,从而运行不同的命令。 |
type | 显示文本文件的内容 |
type 文件名 more | 有事显示的内容过多,想要一行一行显示时调用。 |
type 文件名 find “关键字” | 只输出需要查找的关键字 |
set | 该指令用来设置变量 |
输入/?指令查看指令详情
/c 添加自己的选项
/n 不显示提示文本
需要注意的是/t和/d需要配合使用。/t倒计时几秒。/d倒计时结束后的默认选项
MDK 符号字解释KEY 例子 描述% PROJECT1.UVPROJX 带扩展名的文件名
# C:\MYPROJECT\PROJECT1.UVPROJX 带扩展名的完整路径和文件名
@ PROJECT1 没有扩展名或路径说明的文件名
$ C:\MYPROJECT\ 用反斜杠扩展的文件路径名。
! .\SRC\TEST.C 具有当前文件夹扩展名和相对路径规范的文件名
~ 1 123 当前光标位置的行号
^ 1 51 当前光标位置的列号$D 从设备数据库中选择的设备名称。
E 编辑器文件名目前在焦点。
F 根据上下文,这个文件代码返回:在窗口Project中选择的文件。 当前活动的编辑器文件。 当前由构建过程翻译的文件.
H 应用程序HEX文件名 (PROJECT1.H86).
$J 编译器的绝对路径。 编译器基本文件夹列在项目-管理-项目项目-文件夹/扩展- ARMCC文件夹。例如我自己的该参数的输出结果就是D:\kei5\ARM\ARMCC\include
K 开发工具链的绝对根文件夹,不管使用的关键代码是什么
L 链接器输出文件。 通常用于调试的可执行文件(PROJECT1).
$M CPU mask revision number.
P 当前项目文件名。
$S 当前激活的设备族包的安装文件夹.
X 视觉可执行程序文件(…\UV4\UV4. exe)。 适用于Key Code %, #, and @.
$X 目标-目标- XTAL选项中指定的以MHz为单位的XTAL时钟频率。
^X XTAL时钟频率在千赫指定的目标-目标- XTAL选项。
Y 预处理器符号文件co-arm_<target_name>.h为C文件类型定义。 适用于关键代码#。
Z 预处理器符号文件co-arm_<target_name>.hpp为c++文件类型定义。 适用于关键代码#。$L $表示应用的是路径,L表示Output->Name of Executable中设置的名字,即工程的输出名(包含路径)。@L @表示引用的是文件名,@L引用工程的输出名字。换句话说就是使用Keil,在Output中设置的文件输出名字。#L #表示引用的是本身,#L即工程的输出文件。keil的输出文件是.axf文件。如我自己的该参数的输出结果就是D:\myproject\project\Objects\app.axf实际fromelf.exe应该也要使用相对路径,所以命令可以改成:$KARM\ARMCC\bin\fromelf.exe --bin -o "$L@L.bin" "#L"$K 表示的是MDK的安装路径。
set /p 变量=等待输入的提示字
set /a 变量=公式
if exist 文件名 查看该文件是否存在
if "字符串"=="字符串" 判断两个字符串是否相等。if %变量% if %变量%
可以通过与choice /c指令配合来完成输入数字的判断。/i 参数:不区分大小写,更改代码
for 循环指令。这里需要了解两个关键字%i、%%i %i这个关键字不能在bat中使用。只能再CMD命令下的for中使用。
for /l .... 该集表示以增量形式从开始到结束的一个数字序列。
goto
跳转执行标签
在Bat中有标签一词,跟C语言的函数类似。并且标签必须单独一行,并且以冒号开头。
这里做一个死循环,如下:
符号(&、&&、||、|、>、>>)
& 顺序执行多条命令,而不管命令是否执行成功&& 顺序执行多条命令,当碰到执行出错的命令后将不执行后面的命令|| 顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令(即:只有前面命令执行错误时才执行后面命令)| 管道命令 前一个命令的执行结果输出到后一个命令 如:help | more> 清除文件中原有的内容后再写入>> 追加内容到文件末尾,而不会清除原有的内容主要将本来显示在屏幕上的内容输出到指定文件中指定文件如果不存在,则自动生成该文件
延迟环境变量扩展
CMD在解释我们的命令的时候,首先会读取命令行一条完整的命令。然后对其进行一些命令格式的匹配操作,看你所输入的命令格式是不是符合他的要求。如果我们要在我们的命令中引用一些变量,那么我们如何让CMD在解释我们的命令时。能识别出这个变量呢?这时我们就可以在变量名字两边加一个%号, 如%name%。当CMD在对读取我们的整行命令进行格式匹配的时候,就会发现name这个字符两边加了%号,就不会把他当作普通字符处理,而是会把他当 作一个变量处理。变量名叫name。然后CMD就会找到变量名对应的值,用变量名的值替换掉这个变量名字(name),(如果变量名不存在值,就返回空 值)。再将这个替换好并且匹配的命令执行。这个替换值的过程就叫做变量扩展。说白了就是把变量的名字,用他的值给替换掉后执行。也就是批处理如何识别一 个变量的过程.。
set var=test
echo %var%
此时编译器再读取的时候直接将%var%替换为test。所以显示就显示test。
在看下边这个
for /l %%i in (1,1,5) do (
set var=%%i
echo %var%)
这个在预编译的时候将%var%替换成%%i,但是%%i又不认识是什么,所以程序在运行的时候就会出错。运行结果如下:
此时就需要使用延迟环境变量扩展,即每条指令在执行之前才将变量进行替换,以保证对变量的任何修改都可以实时生效.。
使用setloacl ENABLEDELAYEDEXPANSION这个命令来启用"延迟环境变量扩展",遇到的变量需要用!变量!进行替换。那上边异常的代码可以修改为:
setlocal ENABLEDELAYEDEXPANSION
for /l %%i in (1,1,5) do (
set var=%%i
echo !var!)
exit
退出当前DOS控制台。