我用到的一些bat 命令以作备忘
//实现的功能是:分别输出不同的文件(规律)
一:输出日志
adb pull /sdcard/txz/log/text_all D:/log
rem for /l %%i in (1,1,10) do adb pull /sdcard/txz/log/text_all_%%i D:/log
pause
rem 为批处理中的注释
for /l /f /r /d 分别对应着不同的含义来完成不同的操作
可以看一下for的介绍
二:为了解决空间不足的问题需要把我认为设备上无关的App卸载掉
setlocal enabledelayedexpansion rem 设置是否需要更新变量值
for /f "tokens=1-3 delims=:" %%a in ('adb shell pm list package -3') do (
set dd=%%b
set "dd=!dd:~0,10!"
echo !dd!
rem set PARAM=%%b
rem set "PARAM=!PARAM:~0,10!" rem 注意这里为!!和这里是:~
rem echo 输出!PARAM!
rem 调用另一个文件 因为adb uninstall %%b 不可以执行,具体原因未知(还望高手赐教)
if not "!dd!" =="com.txznet" call uninstallAll.bat %%b
//if not "!dd!" =="com.txznet" call adb uninstall %%b 表示这么写又可以了
)
uninstallAll.bat
echo %1
adb uninstall %1
if errorlevel 0 echo 卸载成功
这里介绍一下:token意思是取第几个分割数据 1-3 的意思是:
分割1 分割2 分割3 分割4(只取1-3的数据)
delims 意思是根据什么进行分割(默认为空格):相当于java的split函数
bat的截取和替换的方式是:%VAR:~0,n%和%VAR:=0,n%
如上使用了截取来判断两个字符串是否相同
同时注意,如果你要改变局部变量的值:请加setlocal enabledelayedexpansion这一句并且相应的地方需要使用!VAR!来显示调用。
2016年12月30日18:21:34
三:功能:代码删除指定包名的进程
又一次使用bat脚本但是又遇到问题,并成功解决,特此感谢赵三元的指教
脚本代码如下
setlocal enabledelayedexpansion rem 设置是否需要更新变量值
for /f %%a in ('adb shell "ps|grep com.txznet.music|awk '{print $2}'"') do (set str=%%a
set c=!str:~0,5!
echo !c!
adb shell kill !c!
)
adb shell "ps|grep com.txznet.music|awk '{print $2}'"
pause
原因分析如下:
1.set复制不予许有空格否则失败:set a=bbb(对) set a = bbb (错,含有空格)
2.
adb shell "ps|grep com.txznet.music|awk '{print $2}'"
输出的结果结尾是\r\n,所以导致一开始adb shell kill !c!有问题
其中ODOA表示换行符Windows平台的换行符是CR+LF. 十六进制的ASCII值为0D0A.
0a——换行符号------”\n”
0d——回车符号------”\r”
四:使设备本身支持awk等命令
教程:使设备支持全linux命令
rem adb push busybox /system/xbin/
rem adb root
rem adb remount
rem adb shell "chmod 755 /system/xbin/busybox"
rem adb shell "/system/xbin/busybox --install ."
rem adb shell "awk"
rem adb shell "ps |grep com.txznet.music|awk '{print $2}' | head -n 1"
使用时,把注释去掉
五:call和start和goto区别
在同事的bat脚本中发现了自己还有不懂的脚本语句,特为添加
call:strstr "%%a" "Is a directory" 14
:strstr rem 和C语言里面的标签类似的效果
set str1=%~1
set str2=%~2
goto:eof rem 表示调用方法结束
goto 表示不执行goto之后的代码直接调用标签所在处的代码
call 表示执行标签所在处的代码之后回到call之后的代码
start 表示启动一个单独的窗口运行指定的程序或命令(不可以跳转到标签处执行)
(1) 运行 GOTO :EOF 后, CMD 返回并将等待下一条命令.
(2) 运行 EXIT 后, CMD 将直接关闭并返回到曾启动 cmd.exe 的程序或返回到”资源管理器”.
(3) 运行 EXIT /B 后, CMD 将直接关闭并返回到曾启动 cmd.exe 的程序或返回到”资源管理器”.
六:echo的使用
@echo off
1.echo前面加@与否。 作用:加@代表不显示当前行命令自身;否则反之。
2.echo.与echo本身之间没有区别
3.echo &pause 表示echo 执行之后的命令或程序,而非打印
DOS在运行批处理时,
会依次执行批处理中的每条命令,
并且会在显示器上显示,
如果你不想让它们显示,
可以加一个“echo off”
七:从bat脚本中获取用户输入的内容
rem /P 命令行开关允许将变量数值设成用户输入的一行输入
set /p var=
rem /A 命令行开关指定等号右边的字符串为被评估的数字表达式
set /a num+=1
rem 赋值语句的变量与=之间不允许有空格,否则不会赋值上去
set "赋值语句"
set 赋值语句