一、常用批处理内部命令
批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD。
1、REM 和 ::
2、ECHO 和 @
3、PAUSE
4、ERRORLEVEL
5、TITLE
6、COLOR
7、mode 配置系统设备
8、GOTO 和 :
9、FIND
10、START
11、assoc 和 ftype
12、pushd 和 popd
13、CALL
14、shift
15、IF
16、setlocal 与 变量延迟
17、ATTRIB 显示或更改文件属性
1.REM和::
REM为注释命令,给程序添加注解,该命令后内容不执行会回显。::也起到同样作用。
注意:
1)以:开头的字符行,批处理中被看作标号,忽略其后的所有内容。
有效标号:冒号后紧跟一个以字母数字开头的字符串,goto语句可以识别。
无效标号:冒号后紧跟一个非字母数字的一个特殊符号,goto无法识别的标号,可以起到注释作用。所以:: :+都可以做为注释用。
2)::与REM不同的是,::不回显,无论是否用echo on打开命令行回显状态,因此rem比::在某些场景下,更为适用。rem可以用于config.sys文件中。
行内注释格式:%注释内容% (不常用,慎用)
2.ECHO 和 @
@字符放在命令前将关闭该命令回显,无论此时echo是否为打开状态。
建立新文件或增加文件内容:
C:\Users\c1r2\Desktop\Monkey\bat>echo @echo off>1.bat
C:\Users\c1r2\Desktop\Monkey\bat>echo C:\Users\c1r2\Desktop\Monkey\bat>>1.bat
C:\Users\c1r2\Desktop\Monkey\bat>type 1.bat
@echo off
C:\Users\c1r2\Desktop\Monkey\bat
3.PAUSE
就是停止系统命令的执行并显示下面的内容
例:
PAUSE
运行显示:
请按任意键继续. . .
要显示其他提示语,可以这样用:
Echo 其他提示语 & pause > nul
4.errorlevel
程序返回码
echo %errorlevel%
每个命令运行结束,可以用这个命令行格式查看返回码
用于判断刚才的命令是否执行成功
默认值为0,一般命令执行出错会设 errorlevel 为1
5.title
设置cmd窗口的标题
title 新标题
6.COLOR
7.mode 配置系统设备
8.GOTO 和 :
GOTO是跳转的意思。
在批处理中允许以“:XXX”来构建一个标号,然后用GOTO XXX跳转到标号:XXX处,然后执行标号后的命令。
goto命令就是根据这个冒号(:)来寻找下一步跳到到那里。
@echooff
:start
set/a var+=1
echo%var%
if %var% leq 3 GOTO start
pause
9.find
在文件中搜索字符串。
FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]]
/V 显示所有未包含指定字符串的行。
/C 仅显示包含字符串的行数。
/N 显示行号。
/I 搜索字符串时忽略大小写。
/OFF[LINE] 不要跳过具有脱机属性集的文件。
"string" 指定要搜索的文字串,
[drive:][path]filename
指定要搜索的文件。
如果没有指定路径,FIND 将搜索键入的或者由另一命令产生的文字。
Find常和type命令结合使用
Type [drive:][path]filename | find "string" [>tmpfile] #挑选包含string的行
Type [drive:][path]filename | find /v "string" #剔除文件中包含string的行
Type [drive:][path]filename | find /c #显示文件行数
10.start 命令
批处理中调用外部程序的命令(该外部程序在新窗口中运行,批处理程序继续往下执行,不理会外部程序的运行状况),如果直接运行外部程序则必须等外部程序完成后才继续执行剩下的指令,
例:start explorer d:\
调用图形界面打开D盘
11.assoc 和 ftype
文件关联
assoc 设置'文件扩展名'关联,关联到'文件类型'
ftype 设置'文件类型'关联,关联到'执行程序和参数'
12.pushd 和 popd
切换当前目录
@echo off
c: & cd\ & md mp3 #在 C:\ 建立 mp3 文件夹
md d:\mp4 #在 D:\ 建立 mp4 文件夹
cd /d d:\mp4 #更改当前目录为 d:\mp4
pushd c:\mp3 #保存当前目录,并切换当前目录为 c:\mp3
popd #恢复当前目录为刚才保存的 d:\mp4
在当前目录名不确定时,会有点帮助。(dos编程中很有用)
13.CALL
CALL命令可以在批处理执行过程中调用另一个批处理,当另一个批处理执行完后,再继续执行原来的批处理
CALL command
调用一条批处理命令,和直接执行命令效果一样,特殊情况下很有用,比如变量的多级嵌套,见教程后面。在批处理编程中,可以根据一定条件生成命令字符串,用call可以执行该字符串,见例子。
CALL [drive:][path]filename [batch-parameters]
调用的其它批处理程序。filename 参数必须具有 .bat 或 .cmd 扩展名。
14.shift
更改批处理文件中可替换参数的位置。
SHIFT [/n]
如果命令扩展名被启用,SHIFT 命令支持/n 命令行开关;该命令行开关告诉命令从第 n 个参数开始移位;n 介于零和八之间。
15.IF
IF 条件判断语句,语法格式如下:
IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
下面逐一介绍,更详细的分析请看后面章节。
(1) IF [NOT] ERRORLEVEL number command
IF ERRORLEVEL这个句子必须放在某一个命令的后面,执行命令后由IF ERRORLEVEL 来判断命令的返回值。
Number的数字取值范围0~255,判断时值的排列顺序应该由大到小。返回的值大于等于指定的值时,条件成立
例:
@echo off
dir c:
rem 退出代码为>=1就跳至标题1处执行,>=0就跳至标题0处执行
IF ERRORLEVEL 1 goto 1
IF ERRORLEVEL 0 goto 0
Rem 上面的两行不可交换位置,否则失败了也显示成功。
:0
echo 命令执行成功!
Rem 程序执行完毕跳至标题exit处退出
goto exit
:1
echo 命令执行失败!
Rem 程序执行完毕跳至标题exit处退出
goto exit
:exit
pause
(2) IF [NOT] string1==string2 command
string1和string2都为字符的数据,英文内字符的大小写将看作不同,这个条件中的等于号必须是两个(绝对相等的意思)
条件相等后即执行后面的command
检测当前变量的值做出判断,为了防止字符串中含有空格,可用以下格式
if [NOT] {string1}=={string2} command
if [NOT] [string1]==[string2] command
if [NOT] "string1"=="string2" command
这种写法实际上将括号或引号当成字符串的一部分了,只要等号左右两边一致就行了,比如下面的写法就不行:
if {string1}==[string2] command
(3) IF [NOT] EXIST filename command
EXIST filename为文件或目录存在的意思
echo off
IF EXIST autoexec.bat echo 文件存在!
IF not EXIST autoexec.bat echo 文件不存在!
这个批处理大家可以放在C盘和D盘分别执行,看看效果
16.setlocal 与 变量延迟
@echo off
set a=4
set a=5 & echo %a%
pause
例1:批处理在运行到这句“set a=5 & echo %a%”之前,先把这一句整句读取并做了预处理——对变量a赋了值,那么%a%当然就是4了!
@echo off
setlocal enabledelayedexpansion
set a=4
set a=5 & echo !a!
pause
例2:批处理设计了变量延迟,在读取了一条完整的语句之后,不立即对该行的变量赋值,而会在某个单条语句执行之前再进行赋值,也就是说“延迟”了对变量的赋值。
变量延迟的启动语句是“setlocal enabledelayedexpansion”,并且变量要用一对叹号“!!”括起来(注意要用英文的叹号),否则就没有变量延迟的效果。
“set a=5 & echo !a!”这句是给变量a赋值为5并输出(由于启动了变量延迟,所以批处理能够感知到动态变化,即不是先给该行变量赋值,而是在运行过程中给变量赋值,因此此时a的值就是5了)。
@echo off
setlocal enabledelayedexpansion
for /l %%i in (1,1,5) do (
set a=%%i
echo !a!
)
pause
在批处理文件中,引用形式变量i必须使用双百分号,即%%i必须使用双百分号,即%%i。
17.ATTRIB 显示或更改文件属性
ATTRIB [+R|-R] [+A|-A] [+S|-S] [+H|-H] [[drive:] [path] filename] [/S [/D]]
+ 设置属性。
- 清除属性。
R 只读文件属性。
A 存档文件属性。
S 系统文件属性。
H 隐藏文件属性。
[drive:][path][filename]
指定要处理的文件属性。
/S 处理当前文件夹及其子文件夹中的匹配文件。
/D 也处理文件夹。
例:
md autorun
attrib +a +s +h autorun
上面的命令将建立文件夹autorun,然后将其设为存档、系统、隐藏属性
启动monkey命令,实例:
@echo off
set var=0
rem ************循环开始了
:continue
::echo %time%
echo 程序开始时间: %time%
set /a var+=1
echo 第%var%次循环
cd C:\Users\xxx\Desktop\Monkey
echo 当前目录是:C:\Users\xudongliang\Desktop\Monkey
setlocal enabledelayedexpansion
for /L %%i in (1 1 1) do (
set /a randomNum=!random!%%100
echo 随机数:!randomNum!
)
::echo 程序开始时间: %date:~0,10%
::echo 当前日期: %date:~0,4%%date:~5,2%%date:~8,2%
adb shell monkey -p com.xxx.activity --ignore-crashes --ignore-timeouts --ignore-security-exceptions --pct-touch 30 --pct-motion 20 --pct-nav 20 --pct-majornav 15 --pct-appswitch 5 --pct-anyevent 5 --pct-trackball 0 --pct-syskeys 0 -v -v -v --throttle 300 -s %date:~0,4%%date:~5,2%%date:~8,2%!randomNum! 10000 >> C:\Users\xxx\Desktop\Monkey\log\monkey%date:~0,4%%date:~5,2%%date:~8,2%_%var%.log
echo 程序结束时间: %time%
if %var% lss 6 goto continue
rem ************循环结束了
echo 循环执行完毕
pause
参照https://www.jb51.net/article/151923.htm