bat脚本
不区分大小写(for的变量除外)
命令帮助
for /?
set /?
Title
title 现在标题已经换成这句了
Set
字符串赋值:
set var=Hello world!
整型赋值(有符号,4字节):
set /a var=48
*注意点:
set var1=3
set /a var2=5+%var1% => var1被转换为整型3
echo %var2% => 这里是8
从外部获得输入:
set /p var=请输入一些文字:
字符处理:
字符替换
set var2=%var:ld=ms and bugs% => ld 替换成 ms and bugs
控制字符输出
输入的命令 结果 效果
echo %var% 1234567890 显示所有
echo %var:~4% 567890 从第4个字符以后开始显示
echo %var:~4,3% 567 从第4个字符以后开始显示,并只显示前3个
echo %var:~-4% 7890 从倒数第4个字符开始显示
echo %var:~-4,3% 789 从倒数第4个字符开始显示,并只显示前3个
echo %var:~4,-2% 5678 从第4个字符以后开始显示,显示到还剩2个为止
echo %var:~0,3% 123 从头开始显示,并只显示前3个字符
echo %var:~0,-3% 1234567 从头开始显示,显示到还剩3个字符为止
字符拼接
set var2=789abc
set var3=123456
set var1=%var3:~2,3%%var2:~3,3%
echo %var1% => var1为345abc
Call
调用其他新的批处理
当前批处理就会暂停,直到新的批处理结束后,之前的批处理才会继续执行。(并行处理使用start)
call test.bat
call ..\abc\test.bat
call D:\abc\test.bat
作跳转使用
与goto的区别:被跳转标签后的内容处理完成以后,控制会继续执行 call 后面的语句。
::::::::::::跳转.bat::::::::::::
@echo off
call :FirstLable
:SecondLable
echo 然后显示这句
pause
goto :EOF
:FirstLable
echo 首先显示这句
pause
::goto :SecondLable
在用 call 跳转到 :FirstLable 处执行到程序结尾后(此时 call 的任务才刚刚完成),会继续回到 call 语句后的 :SecondLable 处。假如 goto :SecondLable 这一句没有被注释掉的话,那么控制会跳转到 :SecondLable 处直到 goto :EOF 处 call 的使命才真正完成。而且,call 在完成任务后,下面的 :SecondLable 处内容会再次执行一遍。
EOF
隐形标签文件尾
goto :EOF
Start
start msconfig => 用来打开"系统配置应用程序"
start cmd => 用来打开一个新的命令提示符
start "随便写个标题" => 标题要用双引号引用起来,否则会被作为可执行的文件来处理
start http://www.baidu.com => 便打开百度的首页
start E:\game\starcraft\starcraft.exe => 开始星际争霸
start next.bat => 启动另一个批处理 ,与当前bat并行处理
参数的输入与输出
Num作为数值参数,Square作为变量参数,变量参数可作输出参数。
===cur.bat===
echo here is cur.bat
set /a Num=4
set /a Square=1
call current.bat %Num% Square
echo come back to cur.bat , and %Num% square is %Square%
pause
===current.bat===
echo here is current.bat
echo first var is %1
echo second var is %2
set /a %2=%1*%1
echo after cal, var1 is %1
echo after cal, var2 is %2
输出:
延迟环境变量
当我们准备执行一条命令的时候,命令解释器会先将命令读取,如果命令中有环境变量,那么就会将变量的值先读取来出,然后在运行这条命令,如:echo %windir%,当我们执行这条命令的时候,命令解释器会先读出%windir%的值,即c:\windows,然后执行echo,得到的结果是屏幕上显示出c:\windows。
开启延迟环境变量之后,命令解释器就不再是运行命令前先将环境变量读取出来再执行,而是当我们用到延迟环境变量的时候再去从环境变量中读取出来,这就延迟了环境变量读取的时间。
延迟环境变量使能:
setlocal EnableDelayedExpansion
- 延迟环境变量使用:
!a! => a表示变量名
例
setlocal EnableDelayedExpansion
set a=4
set /a a+=1 & echo !a!
pause
COLOR
设置默认的控制台前景和背景颜⾊,颜⾊属性由两个⼗六进制数字指定:第⼀个为背景,第⼆个则为前景。
0 = ⿊⾊ 8 = 灰⾊
1 = 蓝⾊ 9 = 淡蓝⾊
2 = 绿⾊ A = 淡绿⾊
3 = 湖蓝⾊ B = 淡浅绿⾊
4 = 红⾊ C = 淡红⾊
5 = 紫⾊ D = 淡紫⾊
6 = 黄⾊ E = 淡黄⾊
7 = ⽩⾊ F = 亮⽩⾊
例如: "COLOR fc" 在亮⽩⾊上产⽣亮红⾊
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。