批处理是Windows自带的一个脚本引擎,语法简洁、内置一些功能强大的命令,并且可以与Windows上的其他软件进行良好的通信。批处理能够提供一系统自动化处理功能,大幅提高日常工作中的一些琐碎重复事情的效率。
goto start
= 可以是多行文本,可以是命令
= 可以包含重定向符号和其他特殊字符
= 只要不包含 :start 这一行,就都是注释
:start
Echo命令,用来输出后面的信息,后面的信息是字符串也可以是变量。
回显,显示正在执行的代码内容。
Pause,暂停指定,暂停批处理解释器继续读解释执行代码。用户按任何键将继续。
Cls,清屏命令,清除当前控制台显示的内容。
set variable-name=value
set info=Hello world.
echo %info%
注意:=左右都是字符,如果有空格,空格也属性字符串的一部分。
使用set设置的环境变量只在当前进程及其继承进程有效,并且是临时的,进程关闭重启之后失效。
set /A variable-name=value
set /A age=18
echo %age%
注意: 可进行加、减、乘、除、取余操作。 它们的符号分别是 + - * / % ,set /a 可计算的数值,
单个数值且最终运算结果只能大于或等于-2的31次方,小于2的31次方“。批处理算术只能针对整数。
set /A num=18
# 注意在文件中%要取转义字符%%,在命令行中不需要
set /A b=%num%%%20
set toolName=MPTool
set ver=1.0.1
set /A verNo=5
rem 取消字符串变量
set ver=
rem 判断字符串变量是否取消
if [%ver%]==[] echo "String ver is empty"
rem 字符串连接
set mpVer=%toolName% %ver% %verNo%
rem 字符串转整型
set val=12345
set /A numeric=%val%
rem 替换字符串
set text=Make America great again
echo %text:America=China%
rem 截取字符串
set info=abcdefghijklmnopqrstuvwxyz0123456789
echo 截取前5个字符:
echo %info:~0,5%
echo 截取最后5个字符:
echo %info:~-5%
echo 截取第一个到倒数第6个字符:
echo %info:~0,-5%
echo 从第4个字符开始,截取5个字符:
echo %info:~3,5%
echo 从倒数第14个字符开始,截取5个字符:
echo %info:~-14,5%
批处理并不支持真正的数组,以下操作只是模拟数组、列表。
set a[0]=3
set a[1]=5
set a[2]=7
echo %a[0]% %a[1]% %a[2]%
setlocal enabledelayedexpansion
for /l %%n in (0,1,2) do (
echo ![%%n]! )
set list = 1 3 5 7 9
for %%a in (%list%) do (
echo %%a )
if condition (do some stuff)
if condition (do some stuff) else (do other stuff)
set name=tom
if %name%==tom (echo yes)
set age=21
if %age%==20 (echo yes) else (echo No)
REM 圆括号内的内容可以换行
if defined name (echo Yes) else (echo No)
if exist C:\set2.txt echo "File exists"
if exist C:\set3.txt (echo "File exists") else (echo "File does not exist")
For中的变量在文件本时,需要使用转义字符%,在控制台时不需要。
Rem 以下语句将键盘输入输出到info.txt文件夹。
Copy con info.txt
REM 和上面语句等价,按CTRL+C结束输入
Type con>info.txt
Rem 以下两句等价,将IP信息从STDOUT转到文件info.txt中。
Ipconfig >info.txt
Ipconfig 1>info.txt
rem 以下命令只能将net的标准输出记录在result.log文件中,出错信息则会输入到控制台
net stop myservices >result.log
rem 如果想把错误信息输出到文件
net stop myservices 2>result.log
rem 如果想把正确和错误信息都输出到文件,则需要用重定向即将2重定向到1,这样两者都输出到文件
net stop myservices 1>>result.log 2>&1
Rem goto表示跳转到指定标签的位置
Goto XX
Rem XX标签标记位置
:XX
:While
If %name% NEQ tom (
Rem do some stuff
Goto while
)
:Begin
Set /p a=please enter:
If %a%==2 Goto funcA
If %a%==3 Goto FuncB
Exit
:FuncA
Rem do some stuff
Goto Begin:
:FuncB
Rem do some stuff
Goto Begin:
CALL :label arguments
:label rem do so stuff
call f:\test.bat 1 3
批处理中有很多特殊的符号有特殊的用途,但是当我们想将这些特殊的符号当作原始的字符来用时,就需要特殊的处理,此时就需要转义字符^来标识。
:: 此时就需要转义,否则批处理执行错误
Echo you ^& me
:: dir /ad /b /s “%~dp0”^|sort /r是命令字符串,所以|前必须加^转义为字符串
for /f “delims=” %%a in (‘dir /ad /b /s "%~dp0"^|sort /r') do (
rd "%%a">nul 2>nul)
批处理的很多功能都通过扩展组件完成的,Windows的组件基本都提供了命令行操作。