批处理教程
介绍具体命令之前,先普及一些批处理知识:
1. 批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令
2. 批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来 循环执行一条命令。当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的DOS命令(包括 内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。
3. 每个编写好的批处理文件都相当于一个DOS的外部命令,你可以把它所在的目录放到你的DOS搜索路径(path)中来使得它可以在任意位置运行。一个 良好的习惯是在硬盘上建立一个bat或者batch目录(例如C:\batch),然后将所有你编写的批处理文件放到该目录中,这样只要在path中设置 上C:\batch,你就可以在任意位置运行所有你编写的批处理程序。
4. 在DOS和Win9x/Me系统下,C盘根目录下的 autoexec.bat 批处理文件是自动运行批处理文件,每次系统启动时会自动运行该文件,你 可以将系统每次启动时都要运行的命令放入该文件中,例如设置搜索路径,调入鼠标驱动和磁盘缓存,设置系统环境变量等。下面是一个运行于Windows 98下的autoexec.bat的示例:
@ECHO OFF PATH C:\WINDOWS;C:\WINDOWS\COMMAND;C:\UCDOS;C:\DOSTools; C:\SYSTOOLS;C:\WINTOOLS;C:\BATCH LH SMARTDRV.EXE /X LH DOSKEY.COM /insert LH CTMOUSE.EXE SET TEMP=D:\TEMP SET TMP=D:\TEMP
常用命令:
echo:表示显示此命令后的文本
echo off:表示在此语句后所有运行的命令都不显示命令行本身
call:调用另一条批处理文件(如果直接调用别的批处理文件 ,执行完那条文件后将无法执行当前文件后续命令)
pause:运行到此句会暂停,显示Press any key to continue... 等待用户按任意键后继续
rem:相当于 js 中的 //,注释当前行
特殊符号:
@:隐藏执行的命令,只显示结果,如 echo 和 @echo
&:命令连接符,把两个命令连续执行,而不用分行,如 dir C:\ & dir D:\
&&:连接两个命令,当&&前的命令成功时,才执行&&后的命令,如 dir C:\ && dir D:\
|:将上一个命令的输出内容,作为下一个命令的输入内容,如 type C:\windows\*.log|more
||:当||前的命令失败时,才执行||后的命令
>:重定向符,将命令的输出结果重定向到其后面的设备中去,后面的设备中的内容被覆盖,如dir C:\ > D:\test.text
>>:重定向符,将命令的输出结果重定向到其后面的设备中去,后面的设备中的内容会追加
<:重定向符,将后面的指定设备的内容,作为前面命令的输入内容
^:取消特殊符号的作用,如 echo ^>> 1.txt
*:通配符,表示任意个字符,如 del C:\windows\*.log
?:通配符,表示任意一个字符,如 net ?ser
.:表示当前目录,如 dir .\
..:表示上一级目录,如 cd..
"":界定符,通常用来引用含有空格的目录,如 dir "C:\Documents and Settings"
::标签定位符,表示后面的内容是一个标签名,如
@echo off :start pause goto start
,:某些时候可以当空格用,如 dir,C:\
;:当命令相同时,可以将不同目标用;来隔离,如 dir C:\;D:\
%:参数表示符,参数是指在运行批处理文件时在文件名后加的字符串,变量可以从 %0 到 %9,%0表示文件名本身,参数用%1到%9顺序表示。
高级命令:
if:你懂的,主要说它的三种格式:
1. if "参数" == "字符串" 符合此条件的命令,如 if "%1" == "a" format a
2. if exist 文件名 符合此条件的命令,如 if exist config.sys edit config.sys
3. if errorlevel 数字 符合此条件的命令(DOS程序运行时都会返回一个数字给DOS,称为errorlevel),如 if errorlevel 2 goto X
goto:批处理文件运行到这里将跳到goto所指定的标签处,一般与 if 配合使用
choice:此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加 /c: 参数,c:后应写提示可输入的字符,之间无空格,它的 errorlevel 为1234等,如
@echo off choice /c:dme defrag,mem,end if errorlevel 3 goto defrag 应先判断数值最高的错误码 if errorlevel 2 goto mem if errotlevel 1 goto end :defrag c:\dos\defrag goto end :mem mem goto end :end echo good bye
for:你也懂的,格式为:for [%%f] in (集合) do [命令],如
REM 如果是以bat或txt结尾的文件,则显示文件的内容 for %%c in (*.bat *.txt) do type %%c