windows bat脚本基础指令详解
1.pause
暂停批处理的执行并在屏幕上显示"请按任意键继续..."
例如:
改脚本执行结果为:
2.echo
显示指令,会把需要显示的内容展示出来。
例如:
结果为:
3.echo off
在此语句后所有运行的命令都不显示命令行本身,但是本身的指令是会显示出来的。
例如:
结果为:
4.@
不显示本行命令行
例如:
结果为:
5.call
调用另一个批处理文件(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)
创建另一个脚本test2.bat作为测试
分情况,
第一种,2号脚本和1号脚本在同一个目录下
结果为:
第二种,2号脚本和1号脚本不在同一个目录,并且2号脚本目录包含中文路径。
结果报错:
这是因为中文路径系统默认识别不了,可以通过软件转编码来完成。这里以notepad++为例。
转码后保存,再次执行1号脚本
结果为:
第三种,2号路径中包含了空格
修改脚本
结果:
6.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 中断应用程序。
如果不加参数,则只开启新的窗口来执行命令。
例如:
结果:
如果需要修改新的窗口标题,则使用参数"标题"
例如:
结果
如果2号脚本路径包含空格,则路径需要加"路径"
例如
结果
7.%0-%9
%0是指批处理文件的本身,%1-%9是传入的参数。这个参数是从批处理外传入的。
例如:
直接打开脚本显示:
在命令行输入:
输出结果为
这里再补充一下扩展知识。
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\includeK 开发工具链的绝对根文件夹,不管使用的关键代码是什么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 "[email protected]" "#L"
$K 表示的是MDK的安装路径。
10.choice
使用此命令可以让用户输入一个字符,从而运行不同的命令。
输入/?指令查看指令详情
/c 添加自己的选项
/n 不显示提示文本
需要注意的是/t和/d需要配合使用。/t倒计时几秒。/d倒计时结束后的默认选项
例如
10秒倒计时结束后显示
11.type
显示文本文件的内容
先创建一个测试文本test.txt
调用脚本来显示
结果为:
type 文件名 | more
有事显示的内容过多,想要一行一行显示时调用。
最下行会显示more,任意键会再显示一行
type 文件名 | find "关键字"
只输出需要查找的关键字
结果为
12.set
该指令用来设置变量
不带参数为设置变量。
例如
@echo offecho hello worldset value=123456echo 输入的值为%value%pause
执行结果为:
set /p 变量=等待输入的提示字
例如
@echo offecho hello worldset /p value=请输入值echo 输入的值为%value%pause
结果:
set /a 变量=公式
例如:
@echo offecho hello worldset /a value=1+2+3echo 结果:%value%pause
结果:
13.IF
用于判断
if exist 文件名
查看该文件是否存在
例如
@echo offecho hello worldif exist test1.txt (echo this file exist) else (echo this file not exist)pause
结果为
可以写到一行,但是一定要注意空格,否则语法为失败。
此外,如果换行,必须"括号"为行最后一个字符。否则无法执行。
if "字符串"=="字符串"
判断两个字符串是否相等。
例如
@echo offecho hello worldif "123"=="134" (echo equality) else (echo not equality)pause
结果:
if %变量%
可以通过与set /p指令配合来完成输入数字的判断。
例如:
@echo offecho 1.输出数字echo 2.输出字符echo 3.输出汉字set /p value=请输入if %value%==1 (echo 数字) else if %value%==2 (echo 字符) else if %value%==3 (echo 汉字) else (echo 输入错误)pause
结果:
可以通过与choice /c指令配合来完成输入数字的判断。
例如:
@echo offecho 1.输出数字echo 2.输出字符echo 3.输出汉字choice /c 123if %errorlevel%==1 echo 数字if %errorlevel%==2 echo 字符if %errorlevel%==3 echo 汉字pause
结果:
字符串对比
结果如下:
/i 参数:不区分大小写,更改代码
结果:
14.for
循环指令。这里需要了解两个关键字%i、%%i
%i这个关键字不能在bat中使用。只能再CMD命令下的for中使用。
例如在cmd中:for %i in(command1) do command2
%%i是在bat的for中使用的指令。
例如for %%i in(command1) do command2
for %%i in(command1) do command2是for的语法使用规则。
1.for、in和do是for语句的关键字,它们三个缺一不可;
2.%%I是for语句中对形式变量的引用,即使变量l在do后的语句中没有参与语句的执行,也是必须出现的;
3.in之后,do之前的括号不能省略;
4.command1表示字符串或变量,command2表示字符串、变量或命令语句;
意思为:循环调用command1中的元素作为参数,来参与command2的执行
此外需要注意几点
1.for语句的形式变量I,可以换成26个字母中的任意一个,这些字母会区分大小写,也就是说,%%I和%%i会被认为不是同一个变量;形式变量I还可以换成其他的字符,但是,为了不与批处理中的%0~%9这10个形式变量发生冲突,请不要随意把%%I替换为%%0~%%9中的任意一个;
2.in和do之间的command1表示的字符串或变量可以是一个,也可以是多个,每一个字符串或变量,我们称之为一个元素,每个元素之间,用空格键、跳格键、逗号、分号或等号分隔;
3.for语句依次提取command1中的每一个元素,把它的值赋予形式变量I,带到do后的command2中参与命令的执行;并且每次只提取一个元素,然后执行一次do后的命令语句,而无论这个元素是否被带到command2中参与了command2的运行;当执行完一次do后的语句之后,再提取command1中的下一个元素,再执行一次command2,如此循环,直到command1中的所有元素都已经被提取完毕,该for语句才宣告执行结束。
例如:
结果:
for /l ....
该集表示以增量形式从开始到结束的一个数字序列。
例如:
结果:
高级用法
搜索当前目录下有哪些文件?
搜索当前目录下所有的文本文件?
15:goto
跳转执行标签
在Bat中有标签一词,跟C语言的函数类似。并且标签必须单独一行,并且以冒号开头。
这里做一个死循环,如下:
结果
这样在每次输入结果后,就会回到起始,重新执行。
16.符号(&、&&、
栏目分类
- Nervos Network中文网
- Nervos Network中文网
你的位置:TenX中文网 > Nervos Network中文网 > windows bat脚本基础指令详解