windows下的bat编写经验笔记
来源:互联网 发布:淘宝偷换链接怎么处理 编辑:程序博客网 时间:2024/05/16 17:39
平时用得最多的还是windows,
快速批量执行某些操作,还是需要有的.
所以.想方便,有时还是得写个bat来运行.
这就需要bat的语法了.
但是bat的语法就像之前的vb风格,有点难明白,不想js,php之类这么易用.
这里的经验可能很乱,但是我只写一下我遇到的问题,是经过测试才明白的,且直接 命令 /?是看不出来的那种,才值得说.
后面会不停的补充
1. 怎么方便的从一串字符中分析出目录/基本文件名/后缀名?
set kkk=c:\qidizi\kdkdkkd.qdzecho offcall :spli "%kkk%"goto :EOFexit:spliset fp=%~1set dp=%~dp1set pbn=%~n1set px=%~x1echo.echo "%fp%" "%dp%" "%pbn%" "%px%"goto :EOF:eof_spli
call后,
结果
"c:\qidizi\kdkdkkd.qdz" "c:\qidizi\" "kdkdkkd" ".qdz"
2. switch与default式的实现
原理是把所有的拼上,call失败它会设置
:chtitle 选择操作set called=0 set ch=exitecho 工具箱echo.echo 序号 对应任务echo.echo 1 adbecho 2 logcatecho 3 重启echo 4 上传文件echo 5 签名echo 6 安装apkecho 7 卸载apkecho 8 反编AndroidManifest.xmlecho 9 odex转apk包内classes.dexecho 其它 退出echo.echo 请输入上面序号数字后,回车即可完成操作的选择echo.set /p ch=:eof_chclsset /a ch*=1call :callLabel%ch%IF %called% EQU 1 goto checho.echo 本程序即将退出...稍息自动关闭窗口ping 127.0.0.1 -n 2 >nulGOTO :EOFexit:callLabel2 set called=1 goto :EOF:eof_callLabel2
3 延时
因为bat是一行一行解释的,
ping 127.0.0.1 -n 3 >nul
延时大概是3秒?一ping花一秒?
4 验证是否有某功能,且不导致bat出错退出
call :javaTestgoto eof_javaTest:javaTestset ea=%ERRORLEVEL%echo 运行环境值当前是:%ea% java.exe -versionset eb=%ERRORLEVEL%echo 测试java环境后,运行环境值是:%eb%if %ea% EQU %eb% (clsgoto :EOF) else (echo 运行环境测试前后不同[java出错影响]:%ea% != %eb%echo 证明没有java环境,无法进行签名,请安装java再使用)goto :EOF:eof_javaTest
5 func形态? 那就是上面的call :xxx,可以多次调用,只是编写时,注意goto ,别死在那里即可,func结束时别用exit,要用goto :EOF,这是退出call层,但是不会中止bat
6 判断某句运行结果?
echo 查找是否有处于recovery状态的手机%adb% devices|find "recovery"echo 结果意义:echo 0: 表示,有此状态的手机连结着;echo 1: 表示,无此状态的手机;echo 查找结果:echo %ERRORLEVEL%if %ERRORLEVEL% EQU 0 (echo.echo 发现有手机处于recovery模式,进入上传步骤goto startUpload)echo 未找到处于recovery状态的手机echo.还有就是运行完命令后,直接检测环境变量
%ERRORLEVEL%
如果在环境变量不保证情况下,
可以使用像下面检测文件还是目录方式,findstr+for
7 换行(空行)
echo.
注意echo 不能直接写换行,只能后面跟紧个句点号.
8 if 与 for之类的块代码
if "ddd" == "" (
echo 都是 if中
ecoh 也是if中
) else (
)
注意 (的左边必须跟着上行,else不能换行写
(
这里不能再写(),否则解析时,会使用紧跟的,
)
如
if "" == "" (
echo (ddd)
) else (
echo a
)
echo b
第一句只出来 (ddd,非(ddd)
9 比较非空字符 if "%input%" == ""
10 变量赋值 set var=,注意=号紧跟变量名
11 set /p input=直接回车,并不会改变input的值
:reset /p input=echo %input%goto re
第一轮输入 loop1
出来loop1
第二轮直接回车.
还是出来loop1
可以
set input=
set /p input=
来防止
12
在cmd中直接输入时for使用一个%,
如
for /F "usebackq" %i in (`dir`) do echo %i
放到bat时,得二个%
for /F "usebackq" %%i in (`dir`) do echo %%i
13
for 的引号是与~同一键的符号,非''单引,或是""双引
如
for /F "usebackq" %%i in (`dir`) do echo %%i
14
for 的块代码如下,也是(紧跟
for /F "usebackq" %%i in (`dir`) do (
echo %%i
)
15
判断给出的字符串是一个文件还是一个目录路径
直接测试
C:\Users\Administrator\Desktop\android\bin>for /f "usebackq" %i in (`dir "%cd%\adb.exe" /b /a:-d /s^|findstr /i /p /x /b /l /n "%cd%\adb.exe"`) do echo 是文件
C:\Users\Administrator\Desktop\android\bin\adb.exe
1:C:\Users\Administrator\Desktop\android\bin\adb.exe
C:\Users\Administrator\Desktop\android\bin>echo 是文件
是文件
注意|符号需要^来转义
bat中使用
:reset /p s=call :isFile "%s%"if %isFile% EQU 1 (echo 是文件) else (echo 是目录)goto re:isFileset p=%~f1set isFile=0for /f "usebackq" %%i in (`dir "%p%" /b /a:-d /s^|findstr /i /p /x /b /l /n "%p%"`) do set isFile=1goto :EOF
10 判断输入 set /p input=,并给新的变量,这里不能直接写 set n=%input%,因为bat对特殊字符处理不好.
- windows下的bat编写经验笔记
- windows下的bat编程
- windows bat脚本编写
- windows bat脚本编写
- windows bat脚本编写
- windows bat脚本编写
- windows bat脚本编写
- windows bat脚本编写
- windows bat脚本编写
- windows bat脚本编写
- windows bat脚本编写
- windows编写一个小bat脚本 列出当前目录下所有的文件名到一个文本文件
- Windows下编写.bat文件一键启动nginx+php
- windows bat脚本编写入门,可以做windows的crontab
- windows下的DPM经验
- windows下bat的小问题
- windows下执行java应用的bat
- Windows下批处理文件(.bat)的使用
- XNA4.0学习笔记1:XNA解析及精灵动画
- 逃离故障的十条运维工作经验总结
- strscr() strlen() strcpy()实现
- 使用getrusage获取进程使用系统资源信息
- Java Socket实战之六 使用NIO包实现Socket通信
- windows下的bat编写经验笔记
- sqlserver日期函数
- javascript prototype介绍的文章 .
- jsp 数据库连接操作
- js tab块
- 如何在iOS上展现Web Service数据
- IOS学习笔记27—使用GDataXML解析XML文档
- Java Socket实战之七 使用Socket通信传输文件
- Android 4.0(Ice Cream Sandwich, 简称ICS,冰激凌三明治)