bat学习笔记
来源:互联网 发布:华为中级网络认 编辑:程序博客网 时间:2024/04/29 14:41
1.基本的配置
@echo offcolor 8fset /a num=0echo %num%pause
第一行是指关闭cmd的回显,也就是说执行某段代码时不会在cmd窗口显示这段代码;
第二行配置窗口颜色,可以用help color获取不同颜色的代码;
第三行是指将0赋给num变量
第四行是指显示num的值,在bat中使用变量需加上%或!在变量两边
第五行 暂停,按任意键继续
2.关于errorlevel
errorlevel是bat提供的一个变量,它用来检测上一句的代码是否执行成功,成功则值为0,失败则为非零数,一般用%errorlevel%或!errorlevel!获取值,例如:
set /a num=0echo %errorlevel%
则输出结果为0,表示上一句变量赋值成功。
3.关于setlocal EnableDelayedExpansion
setlocal EnableDelayedExpansionsysteminfo>>sitemp.txtfind "Windows 7" "sitemp.txt"if !errorlevel!==0 ( find "X86-based PC" "sitemp.txt" if !errorlevel!==0 ( set slist=win7x86list set /a bit=0 ) else ( set slist=win7x64list set /a bit=1 )) else ( find "X86-based PC" "sitemp.txt" if !errorlevel!==0 ( set slist=win10x86list set /a bit=0 ) else ( set slist=win10x64list set /a bit=1 ))del sitemp.txt
如果不开启变量延迟,则变量errorlevel的值会一直为第一次得到的值;值得注意的是,在开启变量延迟后,变量前后需用感叹号!括起来,而不能用%;开启变量延迟的前提下,想要输出感叹号,需要以^^!形式才能输出,例如: setlocal EnableDelayedExpansion
echo ^^!
这样才能正常显示!
4.find和findstr
要想把查找的成功与否的结果作为一个判断条件,一般采用find命令,因为find命令可以返回参数给!errorlevel!,找到则!errorlevel!值为0,反之不为0,代码举例见3.
5.输出指定内容到文件
//123写入test.txtecho 123>>test.txt//特殊字符的写入//()写入test.txtecho ^(^)>>test.txt//变量写入,写%a%到test.txtecho %%a%%>>test.txt//>>写到test.txtecho ^>^> >>test.txt//多行同时写入到test.txt( echo 1echo 2echo 3)>>test.txt//if else写入,注意else需和上一句命令在同一行,否则写入错误( echo if xxxx ^(echo xxxx ^) else ^(echo xxxxx ^) )>>test.txt
6.常用命令
//copycopy 1.txt 2.txt 复制1.txt到2.txtcopy 1.txt 2.txt //强制覆盖copy 1.txt C:\bat //复制1.txt到指定文件夹//第二个参数是已有文件夹时,move命令类似于剪切;第二个参数不是已有文件夹时,move命令类似于 剪切+重命名---【注意】网上说move第二个参数不能是文件,实践证明是错的move 1.txt 2.txt //执行结果是生成2.txt,内容和1.txt相同move 1.txt C:\bat //将1.txt剪切到指定目录//del只能删除文件或文件夹下的所有文件,不能删除文件夹及子文件夹del 1.txt//rd 删除目录rd folder //folder为空才可删除rd /s folder //删除folder及子目录所有文件,需要确认操作rd /s /q folder //删除folder及子目录所有文件,无需确认
7.常用操作
//导出注册表操作reg export HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall uninstall.reg//获取进程列表的映像名称wmic process get name
8.if else
//完整版if xxx ( //注意:括号前有空格 command ) else ( command)
9.for循环
FOR这条命令基本上都被用来处理文本
/D
FOR /D %%variable IN (set) DO command
主要用于目录搜索,不会搜索文件
/R
递归
进入根目录树 [Drive:]Path,在树的每个目录中执行 for 语句。如果在 /R 后没有指定目录,则认为是当前目录。
@echo offfor /r c:/ %%i in (*.exe) do @echo %%ipause
执行后把C盘根目录,和每个目录的子目录下面全部
的EXE文件都列出来
/F
在批处理中使用的最多,主要用来处理文件和一些命令的输出结果,用法如下:
格式:
FOR /F [“options”] %%i IN (file) DO command
FOR /F [“options”] %%i IN (“string”) DO command
FOR /F [“options”] %%i IN (‘command’) DO command
FOR /F %%i IN (file) DO command
按照每一行分成一个一个的元素
//举例//假如文件a.txt中有如下内容:第1行第1列 第1行第2列 第1行第3列第2行第1列 第2行第2列 第2行第3列第3行第1列 第3行第2列 第3行第3列for /f %%i in (a.txt) do echo %%i//参数/f,所以for会先打开a.txt,然后读出a.txt里面的所有内容,把它作为一个集合,并且以每一行作为一个元素,所以会产生这样的集合,{“第1行第1列 第1行第2列 第1行第3列”, //第一个元素“第2行第1列 第2行第2列 第2行第3列”, //第二个元素“第3行第1列 第3行第2列 第3行第3列”} //第三个元素for /f %%i in (a.txt) do echo %%i //这个会显示a.txt里面的内容,因为/f的作用,会读出a.txt中 的内容。for %%i in (a.txt) do echo %%i //而这个只会显示a.txt这个名字,并不会读取其中的内容。for /f "delims= " %%i in (a.txt) do echo %%i显示的结果是:第1行第1列第2行第1列第3行第1列"delims= "后面有一个空格,意思是将每个元素以空格分割,默认是只取分割之后的第一个元素。for /f "tokens=2 delims= " %%i in (a.txt) do echo %%i执行结果:第1行第2列第2行第2列第3行第2列如果要显示第三列,那就换成tokens=3。同时tokens支持通配符*,以及限定范围。如果要显示第二列和第三列,则换成tokens=2,3或tokens=2-3,如果还有更多的则为:tokens=2-10之类的。此时的命令为:for /f "tokens=2,3 delims= " %%i in (a.txt) do echo %%i %%j怎么多出一个%%j?这是因为你的tokens后面要取每一行的两列,用%%i来替换第二列,用%%j来替换第三列。并且必须是按照英文字母顺序排列的,%%j不能换成%%k,因为i后面是j执行结果为:第1行第2列 第1行第3列第2行第2列 第2行第3列第3行第2列 第3行第3列对以通配符*,就是把这一行全部或者这一行的剩余部分当作一个元素了。比如:for /f "tokens=* delims= " %%i in (a.txt) do echo %%i执行结果为:第1行第1列 第1行第2列 第1行第3列第2行第1列 第2行第2列 第2行第3列第3行第1列 第3行第2列 第3行第3列其实就跟for /f %%i in (a.txt) do echo %%i的执行结果是一样的。再如:for /f "tokens=2,* delims= " %%i in (a.txt) do echo %%i %%j执行结果为:第1行第2列 第1行第3列第2行第2列 第2行第3列第3行第2列 第3行第3列用%%i代替第二列,用%%j代替剩余的所有。skip就是要忽略文件的前多少行,而eol用来指定当一行以什么符号开始时,就忽略它。比如:for /f "skip=2 tokens=*" %%i in (a.txt) do echo %%i结果为:第3行第1列 第3行第2列 第3行第3列用skip来告诉for跳过前两行。如果不加tokens=*的话,执行结果为:第3行第1列当a.txt内容变成:.第1行第1列 第1行第2列 第1行第3列.第2行第1列 第2行第2列 第2行第3列第3行第1列 第3行第2列 第3行第3列执行for /f "eol=. tokens=*" %%i in (a.txt) do echo %%i结果是:第3行第1列 第3行第2列 第3行第3列用eol来告诉for忽略以“.”开头的行。同样也必须加tokens=*,否则只会显示“第3行第1列”//for循环内容参考了http://blog.csdn.net/jeefchen/article/details/5663822,这篇文字对for介绍的非常清楚
- BAT文件学习笔记
- Bat学习笔记大全
- Bat学习笔记大全
- BAT学习笔记
- bat批处理文件学习笔记
- Bat学习笔记
- 批处理(.bat)学习笔记
- bat学习笔记
- Bat学习笔记
- bat文件编写学习笔记
- 【学习笔记】BAT命令大全
- bat学习笔记(二)
- Tomcat学习笔记 startup.bat 与shutdown.bat
- Tomcat学习笔记 catalina.bat & setclasspath.bat
- BAT面试算法基础学习笔记
- bat命令学习笔记(一)
- BAT 笔记
- 学习bat
- LeetCode: Count Primes
- zookeeper的简单介绍
- 笔记二 习题2.26有符号和无符号引出的问题
- Android签名的一些事。
- Hibernate之hbm.xml文档配置——简
- bat学习笔记
- java编程模式用CA给证书进行签名/签发证书
- Linux中CP和SCP(远程拷贝)的介绍
- mybatis入门
- 每天一个数组函数
- Java 中的 ==, equals 与 hashCode 的区别与联系
- 树莓派3初始化
- 【JAVA笔记——器】Spring Aop 实现Log日志系统——基本实现
- 能容入团队开发成员必备的优秀习惯,提高效率的小技巧