最全批处理命令学习资料完美版.docx
《最全批处理命令学习资料完美版.docx》由会员分享,可在线阅读,更多相关《最全批处理命令学习资料完美版.docx(50页珍藏版)》请在冰豆网上搜索。
最全批处理命令学习资料完美版
一:
批处理文件
批处理文件是扩展名为·bat或·cmd的文本文件,包含一条或多条命令,由DOS或Windows系统嵌的命令解释器来解释运行。
批处理的本质,是一堆DOS命令按一定顺序排列而形成的集合。
二:
常用命令:
1.echo和:
#关闭单行回显
echooff#从下一行开始关闭回显
echooff#从本行开始关闭回显,一般批处理第一行都是这个
echoon#从下一行开始打开回显
echo#显示当前是echooff状态还是echoon状态
echo.#输出一个”回车换行”,空白行
#(同echo,echo;echo+echo[echo]echo/echo")
2.errorlevel
echo%errorlevel%
每个命令运行完毕,可以用这个命令行格式查看返回码
默认值为0,一般命令执行出错会设errorlevel为1
目录操作类命令:
3.dir显示磁盘目录命令
dir#显示当前目录中的文件和子目录
dir/a#显示当前目录中的文件和子目录,包括隐藏文件和系统文件
dirc:
/a:
d#显示C盘当前目录中的目录
dirc:
/a:
-d#显示C盘根目录中的文件
dirc:
"/b/p#/b只显示文件名,/p分页显示
dirc:
"/b/p#/w不显示详细信息
dir*.exe/s#显示当前目录和子目录里所有的.exe文件
4.以树形显示当前路径文件夹结构
tree/f#显示每个文件夹中文件的名字。
5.md建立子目录
mdd:
"a"b"c#如果d:
"a不存在,将会自动创建中级目录
#如果命令扩展名被停用,则需要键入mkdir"a"b"c
6.cd改变当前目录(进入)
cd\#进入根目录
cd#显示当前目录
cd/dd:
\sdk#可以同时更改盘符和目录
cd..#返回上一级目录
7.rd删除子目录命令
rdabc#删除当前目录里的abc子目录,要求为空目录
rd/s/qd:
\temp#删除d:
"temp文件夹与其子文件夹和文件/q安静模式
磁盘操作类命令:
8.format磁盘格式化命令
9.chkdsk检查磁盘当前状态命令
10.label建立磁盘卷标命令
11.vol显示磁盘卷标命令
文件操作类命令:
12.copy文件复制命令
copyc:
\test.txtd:
\test.bak
复制c:
\test.txt文件到d:
\,并重命名为test.bak
copycontest.txt
从屏幕上等待输入,按Ctrl+Z完毕输入,输入容存为test.txt文件
con代表屏幕,prn代表打印机,nul代表空设备
copy1.txt+2.txt3.txt
合并1.txt和2.txt的容,保存为3.txt文件
如果不指定3.txt,则保存到1.txt
copytest.txt+
复制文件到自己,实际上是修改了文件日期
13.xcopy目录复制命令
xcopyc:
\d:
\
14.ren文件改名命令
rend:
\temptmp#支持对文件夹的重命名
15.attrib修改文件属性命令
attribfilename#查看文件属性
+#设置属性
-#清除属性
r#只读文件
a#存档文件
s#系统文件
H#隐藏文件
/S#处理当前文件夹与其所有子文件夹中的匹配文件
/D#处理文件夹
16.type显示文件容
typec:
\boot.ini#显示指定文件的容,程序文件一般会显示乱码
type*.txt#显示当前目录里所有.txt文件的容
17.del删除文件命令
deld:
\test.txt#删除指定文件,不能是隐藏、系统、只读文件
del/q/a/fd:
"temp"*.*#删除d:
"temp文件夹里面的所有文件包括
隐藏、只读、系统文件,不包括子目录
del/q/a/f/sd:
"temp"*.*#删除d:
"temp与子文件夹里面的所有文件包括
隐藏、只读、系统文件,不包括子目录
其他命令:
18.CLS清屏幕命令
19.ver查看系统版本号命令
20.time,date系统时钟日期设置/显示命令
date#显示当前日期,并提示输入新日期,按""回车""略过输入
date/t#只显示当前日期,不提示输入新日期
time#显示当前时间,并提示输入新时间,按""回车""略过输入
time/t#只显示当前时间,不提示输入新时间
21.rem和:
:
注释
注释行不执行操作
22.color设置默认的控制台前景和背景颜色
逻辑命令:
23.goto和:
跳转命令
:
label#行首为:
表示该行是标签行,标签行不执行操作
gotolabel#跳转到指定的标签那一行
24.set定义变量
引用变量可在变量名前后加%,即%变量名%
set#显示目前所有可用的变量,包括系统变量和自定义的变量
echo%SystemDrive%#显示系统盘盘符。
系统变量可以直接引用
setp#显示所有以p开头的变量,有就设errorlevel=1
setp=aa1bb1aa2bb2#设置变量p,并赋值为=后面的字符串,即aa1bb1aa2bb2
echo%p%#显示变量p代表的字符串,即aa1bb1aa2bb2
echo%p:
~6%#显示变量p中第6个字符以后的所有字符,即aa2bb2
echo%p:
~6,3%#显示第6个字符以后的3个字符,即aa2
echo%p:
~0,3%#显示前3个字符,即aa1
echo%p:
~-2%#显示最后面的2个字符,即b2
echo%p:
~0,-2%#显示除了最后2个字符以外的其它字符,即aa1bb1aa2b
echo%p:
aa=c%#用c替换变量p中所有的aa,即显示c1bb1c2bb2
echo%p:
aa=%#将变量p中的所有aa字符串置换为空,即显示1bb12bb2
echo%p:
*bb=c%#第一个bb与其之前的所有字符被替换为c,即显示c1aa2bb2
setp=%p:
*bb=c%#设置变量p,赋值为%p:
*bb=c%,即c1aa2bb2
set/ap=39#设置p为数值型变量,值为39
set/ap=39/10#支持运算符,有小数时用去尾法,去尾得3,p=3
set/ap=p/10#用/a参数时,在=后面的变量可以不加%直接引用
set/ap=”1&0″#”与”运算,要加引号。
其它支持的运算符参见set/?
setp=#取消p变量
set/pp=请输入
屏幕上显示”请输入”,并会将输入的字符串赋值给变量p注意这条可以用来取代choice命令
注意变量在if和for的复合语句里是一次性全部替换的,如
echooff
setp=aaa
if%p%==aaa(
echo%p%
setp=bbb
echo%p%
)
结果将显示
aaa
aaa
因为在读取if语句时已经将所有%p%替换为aaa
这里的""替换"",在/?
帮助里就是指""扩充""、""环境变量扩充""
可以启用”延缓环境变量扩充”,用!
来引用变量,即!
变量名!
echooff
SETLOCALENABLEDELAYEDEXPANSION
setp=aaa
if%p%==aaa(
echo%p%
setp=bbb
echo!
p!
)
ENDLOCAL
结果将显示
aaa
bbb
还有几个动态变量,运行set看不到
%CD%#代表当前目录的字符串
%DATE%#当前日期
%TIME%#当前时间
%RANDOM%#随机整数,介于0~32767
%ERRORLEVEL%#当前ERRORLEVEL值
%CMDEXTVERSION%#当前命令处理器扩展名版本号
%CMDCMDLINE%#调用命令处理器的原始命令行
可以用echo命令查看每个变量值,如echo%time%
注意%time%精确到毫秒,在批处理需要延时处理时可以用到
[变量大全]
系统变量:
系统将其根据事先定义的条件自动赋值,也就是系统已经给他们定义了值,
不需要我们来给他赋值,我们只需要调用。
%ALLUSERSPROFILE%本地返回“所有用户”配置文件的位置。
%APPDATA%本地返回默认情况下应用程序存储数据的位置。
%CD%本地返回当前目录字符串。
%CMDCMDLINE%本地返回用来启动当前的Cmd.exe的准确命令行。
%CMDEXTVERSION%系统返回当前的“命令处理程序扩展”的版本号。
%COMPUTERNAME%系统返回计算机的名称。
%COMSPEC%系统返回命令行解释器可执行程序的准确路径。
%DATE%系统返回当前日期。
使用与date/t命令相同的格式。
由Cmd.exe生成。
%ERRORLEVEL%系统返回上一条命令的错误代码。
通常用非零值表示错误。
%HOMEDRIVE%系统返回连接到用户主目录的本地工作站驱动器号。
基于主目录值而设置。
用
户主目录是在“本地用户和组”中指定的。
%HOMEPATH%系统返回用户主目录的完整路径。
基于主目录值而设置。
用户主目录是在“本
地用户和组”中指定的。
%HOMESHARE%系统返回用户的共享主目录的网络路径。
基于主目录值而设置。
用户主目录是
在“本地用户和组”中指定的。
%LOGONSERVER%本地返回验证当前登录会话的域控制器的名称。
%NUMBER_OF_PROCESSORS%系统指定安装在计算机上的处理器的数目。
%OS%系统返回操作系统名称。
Windows2000显示其操作系统为Windows_NT。
%PATH%系统指定可执行文件的搜索路径。
%PATHEXT%系统返回操作系统认为可执行的文件扩展名的列表。
%PROCESSOR_ARCHITECTURE%系统返回处理器的芯片体系结构。
%PROCESSOR_IDENTFIER%系统返回处理器说明。
%PROCESSOR_LEVEL%系统返回计算机上安装的处理器的型号。
%PROCESSOR_REVISION%系统返回处理器的版本号。
%PROMPT%本地返回当前解释程序的命令提示符设置。
由Cmd.exe生成。
%RANDOM%系统返回0到32767之间的任意十进制数字。
由Cmd.exe生成。
%SYSTEMDRIVE%系统返回包含Windowsserveroperatingsystem根目录(即系统根目录)
的驱动器。
%SYSTEMROOT%系统返回Windowsserveroperatingsystem根目录的位置。
%TEMP%和%TMP%系统和用户返回对当前登录用户可用的应用程序所使用的默认临时目录。
%TIME%系统返回当前时间。
使用与time/t命令相同的格式。
由Cmd.exe生成。
%USERDOMAIN%本地返回包含用户的域的名称。
%USERNAME%本地返回当前登录的用户的名称。
%USERPROFILE%本地返回当前用户的配置文件的位置。
%WINDIR%系统返回操作系统目录的位置。
25.pause暂停命令
26.if判断命令
ifERRORLEVELnumbercommand#判断命令是否正确运行
通常情况下,命令执行成功后,系统变量ERRORLEVEL会被设置成0,
若命令失败,或遇到非法命令,系统变量ERRORLEVEL会被设置成非0。
ifstring1==string2command#判断某两个字符串是否相等
ifexitfilenamecommand#判断驱动器、文件或文件夹是否存在
ifdefinedvarcommand#判断某个变量是否已经被赋值
if1equ2#判断某两个数值是否相等
EQU#等于==
NEQ#不等于!
=
LSS#小于<
LEQ#小于或等于<=
GTR#大于>
GEQ#大于或等于>=
注:
#ELSE子句必须出现在同一行上的IF之后
Example:
if""%1""==""/a""echo
第一个参数是/a
if/i""%1""equ""/a""echo
第一个参数是/a
/i表示不区分大小写,equ和==是一样的
其它运算符参见if/?
ifexistc:
\test.batecho存在c:
\test.bat文件
ifnotexistc:
\windows(
echo不存在c:
"windows文件夹
)
ifexistc:
\test.bat(
echo存在c:
\test.bat
)else(
echo不存在c:
\test.bat
)
ifexist文件名 待执行的命令
如果有指定的文件,则条件成立,运行命令,否则运行下一句。
如ifexistconfig.syseditconfig.sys
iferrorlevel/ifnoterrorlevel数字 待执行的命令
如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。
如iferrorlevel2gotox2
27.call命令调用子程序
CALL[drive:
][path]filename[batch-parameters]
batch-parameters指定批处理程序所需的命令行信息(参数)。
28.exit命令退出命令
29.for循环
/F#分块提取文件
/D#显示当前目录下所有指定的目录名称
/R#枚举文件和目录
/L#计次循环
子参数:
tokens(块)、delims(分块标志)、eol(忽略行)、skip(跳过行)、userbackq(支持长路径名)
CMD窗口中:
for%Iin(command1)docommand2
批处理中:
for%%Iin(command1)docommand2
1、for、in和do是for语句的关键字,它们三个缺一不可;
2、%%I是for语句中对形式变量的引用,就算它在do后的语句中没有参与语句的执行,也是必须出现的;
3、in之后,do之前的括号不能省略;
4、command1表示字符串或变量,command2表示字符串、变量或命令语句;
echooff
for%%Iin(bbs.jksing.)doecho%%I
pause
1、for语句的形式变量I,可以换成26个字母中的任意一个,这些字母会区分大小写,也就是说,%%I和%%i会被认为不是同一个变量;形式变量I还可以换成其他的字符,但是,为了不与批处理中的%0~%9这10个形式变量发生冲突,请不要随意把%%I替换为%%0~%%9中的任意一个;
2、in和do之间的command1表示的字符串或变量可以是一个,也可以是多个,每一个字符串或变量,我们称之为一个元素,每个元素之间,用空格键、跳格键、逗号、分号或等号分隔;
3、for语句依次提取command1中的每一个元素,把它的值赋予形式变量I,带到do后的command2中参与命令的执行;并且每次只提取一个元素,然后执行一次do后的命令语句,而无论这个元素是否被带到command2中参与了command2的运行;当执行完一次do后的语句之后,再提取command1中的下一个元素,再执行一次command2,如此循环,直到command1中的所有元素都已经被提取完毕,该for语句才宣告执行完毕;
Example:
for/f"tokens=1delims="%%ain(test.txt)do(
echo%%a
)
取第1行并显示
for/f"tokens=1,2delims="%%ain(test.txt)do(
echo%%a%%b
)
取1,2行并显示
for/f"tokens=1-3delims="%%ain(test.txt)do(
echo%%a%%b%%c
)
取1到3行并显示
for/f"tokens=2,3,*delims="%%ain(test.txt)do(
echo%%a%%b%%c
)
取2,3行并显示
for/f"eol=!
tokens=*"%%ain(test.txt)do(
echo%%a
)
忽略!
开头的行并显示
for/f"skip=3tokens=*"%%ain(test.txt)do(
echo%%a
)
忽略前三行并显示
for/d%%ain(pro*,doc*)do(
echo%%a
)
显示以pro开头的目录名称,显示以doc开头的目录名称
for/r%systemroot%%%ain(*.tmp)do(
echo%%a
)
显示root目录下后缀名为.tmp的文件与目录
seti=0
for/l%%ain(1,1,100)do(
set/ai+=1
)
echo结算结果:
%i%
(变量起始值,每次递加的步长,终止值)
for/f"usebackq"%%ain("C:
\ProgramFiles\jksing.txt")do(
echo%%a
)
显示jksing中的容,若去掉usebackq,则输出C:
\Program
for/r%%iin(*.txt)do(
echo%%~fi
)
for%%iin(c:
d:
e:
f:
)doecho%%i
依次调用小括号里的每个字符串,执行do后面的命令
注意%%i,在批处理中for语句调用参数用2个%
默认的字符串分隔符是""空格键"",""Tab键"",""回车键""
for%%iin(*.txt)dofind""abc""%%i
对当前目录里所有的txt文件执行find命令
for/r.%%iin(*.txt)dofind""abc""%%i
在当前目录和子目录里所有的.txt文件中搜索包含abc字符串的行
for/r.%%iin(.)doecho%%~pn
显示当前目录名和所有子目录名,包括路径,不包括盘符
for/rd:
"mp3%%iin(*.mp3)doecho%%i>>d:
"mp3.txt
把d:
"mp3与其子目录里的mp3文件的文件名都存到d:
"mp3.txt里去
for/l%%iin(2,1,8)doecho%%i
生成2345678的一串数字,2是数字序列的开头,8是结尾,1表示每次加1
for/f%%iin('set')doecho%%i
对set命令的输出结果循环调用,每行一个
for/f""eol=P""%%iin('set')doecho%%i
取set命令的输出结果,忽略以P开头的那几行
for/f%%iin(d:
"mp3.txt)doecho%%i
显示d:
"mp3.txt里的每个文件名,每行一个,不支持带空格的名称
for/f""delims=""%%iin(d:
"mp3.txt)doecho%%i
显示d:
"mp3.txt里的每个文件名,每行一个,支持带空格的名称
for/f""skip=5tokens=4""%%ain('dir')doecho%%a
对dir命令的结果,跳过前面5行,余下的每行取第4列
每列之间的分隔符为默认的""空格""
可以注意到dir命令输出的前5行是没有文件名的
for/f""tokens=1,2,3delims=-""%%ain('date/t')do(
echo%%a
echo%%b
echo%%c
)
对date/t的输出结果,每行取1、2、3列
第一列对应指定的%%a,后面的%%b和%%c是派生出来的,对应其它列
分隔符指定为-和""空格"",注意delims=-后面有个""空格""
其中tokens=1,2,3若用tokens=1-3替换,效果是一样的
for/f""tokens=2*delims=-""%%ain('date/t')doecho%%b
取第2列给%%a,其后的列都给%%b
30.参数%0%1%2%3%4%5%6%7%8%9%*i%%
命令行传递给批处理的参数
%0#批处理文件本身
%1#第一个参数
%9#第九个参数
%*#从第一个参数开始的所有参数
参数扩展:
%~1#删除引号(""),扩充%1
%~f1#将%1扩充到一个完全合格的路径名
%~d1#仅将%1扩充到一个驱动器号
%~p1#仅将%1扩充到一个路径
%~n1#仅将%1扩充到一个文件名
%~x1#仅将%1扩充到一个文件扩展名
%~s1#扩充的路径指含有短名
%~a1#将%1扩充到文件属性
%~t1#将%1扩充到文件的日期/时间
%~z1#将%1扩充到文件的大小
%~$PATH#查找列在PATH环境变量的目录,并将%1扩充到找到的第一个完全合格的名称。
如果环境变量名未被定义,或者没有找到文件,此组合键会扩充到空字符串
可以组合修定符来取得多重结果:
%~dp1#只将%1扩展到驱动器号和路径
%~nx1#只将%1扩展到文件名和扩展名
%~dp$PATH:
#在列在PATH环境变量中的目录里查找%1,并扩展到找到的第一个文件的驱动器号和路径
%~ftza1#将%1扩展到类似DIR的输出行
31.find查找命令(外部命令)
在文件中搜索字符串
find""abc""c:
"test.txt
在c:
"test.txt文件里查找含abc字符串的行
如果找不到,将设errorlevel返回码为1
find/i“abc”c:
"