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行第3for /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介绍的非常清楚
0 0
原创粉丝点击