服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

热点关注:深入浅析关于批处理文件内幕

一、什么叫做批处理文件? 
批处理文件(文件名为*.bat)就是将一些常用的命令写入一个文本文件内。当我们要使用这个文件时,只要键入批处理文件的文件名,批处理文件就会依照文件中的命令来执行全部或者是一部分指定要执行命令。如此我们便可简化我们的工作,而不用每一次都需要手动键入很多的命令来执行一些动作。 
一个批处理文件的建立,因为必须是一个文本文件;所以只要有字处理功能的软件,都可用来建立此文本文件,例如edit,wordstar,pe2……等程序皆可。 

二、什么是自动批处理? 
自动批处理文件(autoexec.bat),是批处理文件的一种,处于引导盘(一般为c盘或a盘)的根目录下,当每一次开机时,系统将自动到引导盘的根目录下查找它,如果找到了就自动执行它。 

三、批处理文件中可以使用哪些命令? 
只要能够在dos的系统提示符下执行的命令,或应用软件执行文件名称,都能写在批处理文件中,批处理命令也可包含在内,详细如下: 
1.dos的内部命令 
2.dos的外部命令 
3.com的命令文件 
4.exe的可执行文件 
5.批文件命令:call,echo,for,goto,if,pause,rem,shift 
6.其他的批文件 

四、批处理文件命令 

batch dos 命令1.功能: 批处理命令是存储在一个特殊的批处理文件(batch file)中的dos命令。当执行一个批处理文件时,dos将依次执行文件内所存储的各项dos命令。 

2.格式:[d:][path][filename.bat][parameters] 

3.说明: ①、批处理文件的扩展名应为.bat。 
②、当执行批处理文件时,您可将参数(parameters)传给一名称为file-name.bat的文件,给予不同的参数,将可以执行类似的工作。 
③、如果要停止批处理文件的动作,只要按下ctrl+break二键,即可停止正在执行的命令,并且出现下述信息: 
terminate batch job?(y/n) 
如果按下y键就可以终止批处理文件的执行工作。如果按n键,那系统将会继续执行其它的批处理文件中的命令。 

4.范例: ①、如果在test.bat文件内包括一些替换参数,将使得在执行时,可以使用您所提供的值来替换它。例如: 
copy %1.mac %2.mac 
type %2.prn 
type %0.bat 
%0,%1,%2这三个可以被代换的参数,于执行时将使用批处理文件时的三个参数顺序依次来代换之。 
%0参数永远使用批处理文件的文件名来取代。 
在一个批处理文件内最多可以使用10个替换参数(%0到%9) 
②、当您要执行test.bat的批处理文件时,系统将依照%1,%2等顺序给予适当的参数。例如: 
a:\>test a:prog1 b:prog2 
于是系统将以test代表%0,以a:\prog1代表%1,以b:\prog2代表%2因此在执行此命令时,就相当于直接在键盘上依次输入下述dos命令一样: 
copy a:\prog1.mac b:\prog2.mac 
type b:\prog2.prn 
typt test.bat 
③、批处理文件亦可使用dos的环境变量。环境变量于使用时前后都要加上一个%符号。例如要取用dos path的值,您必需输入%path%。下例是先假设将变量destination定义为一台磁盘驱动器代码: 
set destination=c:于是执行以下所述命令 
echo dot here>%destination%file1 (必须在批处理文件中执行) 
执行之后,c磁盘的file1文件内将会存在dot here字符串。 

call 批处理文件命令1.功能: 您可以在批处理文件里面调用令一个批处理文件,执行完毕后在继续执行原来的这个批处理文件内的剩余命令。 

2.格式:call[d:][path][filename.bat][argument] 

3.说明: ①、[argument]参数:指定经由批处理文件所要求的任何命令行信息;它可包含开关选择项、文件指定、变量%1至%9以及其它像%baud%这样的变量。 
②、call命令可以在批处理文件的任何位置,只要执行时不要超过内存容量即可。 
③、批处理文件也可以调用自己本身,但必须确定最后仍可以结束才好。 
④、call命令不可以与重定向输入字符(如:<)以及数据管道字符(如:|)合用。 

4.范例: ①、现有main.bat批处理文件内容如下所述: 
rem i am ist batch file 
rem go to 2nd batch file 
call a2 
rem now come back! 
rem end 
②、其中a2.bat批处理文件内容如下所述: 
rem i am 2nd batch file 
rem i will back to main batch file 
③、执行时 
a:\>main (执行main.bat) 
a:\>rem i am ist batch file (main.bat前两行) 
a:\>rem go 2nd batch file 
a:\>call a2 (由main.bat中调用a2.bat) 
a:\>rem i am 2nd batch file (执行a2.bat文件的内容) 
a:\>rem i will back to main batch file 
a:\>rem now come back! (a2.bat结束后返回main.bat 
a:\>rem end 继续执行其余命令) 

choice选择键组命令 批处理文件命令1.功能: 此命令将显示指定的提示并暂停让用户在指定的键组中做选择,然后返回一个errorlevel参数给批处理程序。您只能在批处理程序中使用本命令。 

2.格式:[d:][path]choice[/c[:]keys][/n][/s][/t[:]c'nn][test] 

3.说明: ①、/c[:]keys参数:在提示中指定允许可用的键。当显示时,keys将以逗黠分开并放置于括弧中,而且其后将会加上问号。如果您并无指定/c参数,则choice将会使用yn来当做默认值。冒号(:)是可有可无的。 
②、/n参数:使choice不显示提示,但是提示前的文字仍会显示。如果您指定此参数,则指定键仍然有效。 
③、/s参数:将导致choice会区分大小写。如果此参数未被指定,则choice将接受用户指定的任意键值的大写或小写。 
④、/t[:]c'nn参数:在默认指定键之前,使choice在指定的秒数中暂停。/t参数可用的值如下所示: 
c---nn秒后,指定的字符将为默认的。字符必须是/c参数中所指定的选择组。 
nn--指定暂停的秒数。可接受0到99之间。如果指定0,则在默认之前将不会有暂停。 
⑤、[test]参数:您想在提示符前显示的字符。假如您包含斜线(\)做为提示前字符的一部分时,则必须加引号。如果您并无提示字符,则choice将仅显示提示符。您所分派的第一个键将为1,第二个键将为2……余此类推。如果用户按下了一个未分派到的键,则choice将发出一警告声响。如果choice检测到一个错误的情况,那么它将返回一errorlevel值为255的值;如果使用者按下了crtl+break二键或ctrl+c二键,则choice将返回一errorlevel值为0的值。 

4、范例: 这个chioce命令最有用的地方就是用在批处理文件设计中。它将让用户按下指定的按键后,执行某一段在批处理文件中的命令。例如:下面是包含choice命令的test.bat文件内容: 

@echo off 
cls 

echo. ┐ 
echo 1.defragment │ 
echo 2.msd ├?显示这些字符 
echo 3.anti-virus │ 
echo. ┘ 

choice/c:123/t:1,10 将出现要您选择1或者2或者3的提示字符,如果等10秒后,用户尚未键入1或2或3中任一字符,则自动键入1。 
if errorlevel 1 goto defragmant 当用户在上述键入1时,将寻找:defragment段来执行defrag程序。 
if errorlevel 2 goto msd 当用户在上述键入2时,将寻找:msd段来执行msd程序。 
if errorlevel 3 goto av 当用户到上述键入3时,将寻找:av段来执行msav程序。 

:defragment ┐ 
defrag ├:defragment段 
goto end ┘ 

:msd ┐ 
msd ├:msd段 
goto end ┘ 

:av ┐ 
msav ├:av段 
goto end ┘ 

:end 结束 


echo 批处理文件命令1.功能: 允许批处理文件执行时显示或不显示命令本身,但对于命令的执行则无影响。 

2.格式:echo [on|off] 
echo [message] 

3.说明: ①、echo命令在启动或系统重置时,均默认为on,而可将每一批处理命令在执行同时,显示在输出设备(屏幕)上。 
②、当echo命令设定为off时在批处理命令执行时,将不显示该命令内容,但不影响执行结果。 
③、如果您指定了echo message,则不论是echo on 或echo off,message信息皆会显示在标准输出设备(屏幕)上。 
④、如果echo后面未加任何字符,如on、off或message,则只会显示出echo当前是在on或off的状态。 

4.范例: 
rem 范例:① 
echo off 
echo piping symbol"\"echo redirect symbol">/" 

“/”及“>”在dos命令里有其特殊的意义,如果要让dos不处理时,则需使用双引号括起来。 

rem 范例: ② 
@echo off 
@rem this line will not display 
ren this line will be displayed 
@file1 

上例中,命今前有@符号,其命令行本身将不会被显示出来,其余的命令行都将被显示出来。 

rem 范例:③ 
@echo off 
dir *.txt 

执行的结果如下: 
volume in drive a is abc 
directory of a:test1 txt 13 06-26-90 4:03p 
test2 txt 13 06-26-90 4:03p 
test3 txt 13 06-26-90 4:04p 

3 file(s) 310272 bytes free 

连echo off 命令本身亦不显示。 

for 内部命令、批处理文件命令1.功能: 可以让我们反覆地执行dos的命令。 

2.格式: 在批处理文件中: 
for [%%c] in(set) do [command][arguments] 
在ms-dos命令行中: 
for [%c] in(set) do [command][arguments] 

3.说明: ①、[%%c]或[%c]参数:将顺序地得到(set)这个集合中的各个元素来作为它的值,当得到一个值之后,就执行command此一dos命令。 
②、(set)中可包含*、?、/等通配符,那么[%%c]参数就会被设置成磁盘中能够匹配引指定的第一个文件名称,同时亦可使用路径。 
③、[command]参数:指定您希望执行在每一包含在(set)中文件命令。 
④、[arguments]参数为:[command]参数指定选择项。 

4.范例: ①、如果一批处理文件中含有下述命令: 
for %%f in (test1.dbf test2.dbf test3.dbf) do del %%f 
则执行时,将有下述的结果: 
del test1.dbf 
del test2.dbf 
del test3.dbf 

②、如果批处理文件中含有下述的命令:(在test.bat内) 
for %%f in (%1 %2 %3 %4 %5) do del %%f 
则在执行时执行下列命令,将有与前项相同的结果: 
a>test test1.dbf test2.dbf test3.dbf 
③、如果欲在dos下直接执行此命令,则%%c只要改为%c的形式即可。 

goto 内部命令、批处理文件命令1.功能: 将dos控制权转移到某标号(label)中,继续往后面执行。在批处理文件中的一个标号是以一个冒号(:)开头,其后跟着一个标号名称(lanel name)所组成。 

2.格式:goto label 

3.说明: ①、goto label会造成接着执行标号label那一行的命令。 
②、如果label未被定义,则当前这一个批处理文件的动作就会停止,并显示label notfound 信息。 
③、批处理文件中的标号名称是由前面8个字来定义的。 
④、批处理文件的标号是永远不会显示出来的。所以未引用的标号可用来作为一些注解。 

4.范例: test.bat 文件,内容如下: 

@echo off 
goto second 
:first 
rem i am first 
:second 
rem i am second 

执行结果如下: 
rem i am second 

if 内部命令、批处理文件命令1.功能: 使dos可以有条件地执行命令。 

2.格式:if[not] errorlevel number command 
if[not] [string1]==[string2] command 
if[not] exist filename.ext command 

3.说明: ①、[not]参数:是一个可选择使用的条目,使用时会将其后面条件的结果再求一个相反的结果。 
②、errorlevel number:errorlevel 是dos产生出来的一个退出码。如果退出码大于或等于number(指定一个十进制值),则此条件成立,系统即可执行后面指定的command。 
注意:测试退出码时要由大到小来测试,因为退出码只要测到大于或等于指定的值时,该条件即成立。 
③、[string1]==[string2]:string1及string2皆为字符的数据,英文字母的大小写将视为不同。当[string1]及[string2]内容完全相同时,则此条件成立,并执行后面指定的command。此条件中的等号(=)必须要有两个。 
④、exist filename.ext:如果指定的文件存在时,则所得的结果为“真”,否则为“假”。若为真,则系统即执行后面指定的command。 
⑤、if命令为一个分支命令。condition是一个条件,command是根据条件成立时才去执行的命令。若不成立时则往下继续执行次一个批处理文件命令。 
⑥、if errorlevel 主要是用于配合自己的程序,并于执行完毕后设置一个错误代码(errorcode),以便与if errorlevel命令一起使用。 

4.范例:rem 范例: ① 
@echo off myprog1 
if errorlevel 2 goto 2 
if errorlevel 1 goto 1 
goto exti 
:l1 
echo data error 
goto exit 
:l2 
echo program cancel 
:exit 

上例中myprog1为一程序,在执行时如果发生退出码时,则表示该程序未执行成功。 

rem 范例:② 
@echo off 
if "%1"=="" goto exit 
if %1==1 goto l1 
if %1==2 goto l2 
goto exit 
:l1 
echo i am l1 
goto exit 
:l2 
echo i am l2 
:exit 

本例中,""(空字符串)、1、2是指定要与%1参数比较诉字符串。 

rem 范例:③ 
@echo off 
if not exist pe2.exe goto exit 
pe2 
goto end 
:exit 
echo pe2.exe not found! 
:end 

本例中,先检查pe2.exe文件是否存在,不存在时则显示一个找不到的信息后结束。如果找到时则执行该程序后结束。 

pause 内部命令、批处理文件命令1.功能: 暂时停止系统命令的执行并显示下列信息: 
strike a eky when ready...... 

2.格式:pause 

3.说明: ①、pause命令可以在dos执行一个命令时暂停,使您有机会来更换盘片。按下任何一个键后,即可让dos继续执行下一个命令。 
②、执行pause命令时,系统会暂停;如果您要终止执行此批处理文件,则您可按下ctrl+break二键,接头按下y,即可终止执行,但如果于此时按下n,则系统将继续执行其它命令。 

4.范例: pause1.bat 文件,内容如下: 

@echo off 
@echo i am first 
pause 
@echo on 
@echo i am second 
@echo please put a new diskette into drive a 
pause 

则其执行结果如下所示: 
a:\>pause1 
i am first 
strike any key when ready... 

i am second 
please put a new diskette into drive a 
strike any key when ready... 

rem 批处理文件命令、配置文件命令1.功能: 可以在配置文件(config.sys)或批处理文件(.bat)中加上注解说明。 

2.格式:rem [comment] 

3.说明: ①、[comment]参数:表示注解行,不会被当作命令执行。 
②、您可在配置文件或批处理文件中将命令的功能注解加注在其中,以供日后引用。 
③、config.sys文件中的rem与在批处理文件中rem,皆可为注解的命令行。但是在批处理文件中,rem会被显示出来,而在config.sys的rem命令行在起动dos时并不会被显示出来。 

4.范例:rem this is a sample config.sys for dbase 3 
files=25 
buffers=20 

shift 内部命令、批处理文件命令1.功能: 使得dos命令行上可以使用超过10个(%0到%9)以上的可替代参数。 

2.格式shift 

3.说明 1.可替代参数的编号是%0--%9,如果要在一个命令行使用超过10个可以被代换的参数,则您可使用shift命令来突破此限制。 
2.每当执行shift一次,所有命令行上的所有参数将向左移动一位。 %1的内容将为%2的内容所取代...,%9内容则由新的参数递补。 
3.%0表示批处理文件本身的名称,永远不变,所以每次执行时您可以加上 9个参数在批处理文件名后。若要增加一个参数,则您将需要使用这个shift命令来移位,才可取得第十个参数。 

4.范例 1.shift.bat文件,内容如下: 
@echo %1 %2 %3 %4 %5 %6 %7 %8 %9 
shift 
@echo %1 %2 %3 %4 %5 %6 %7 %8 %9 
shift 
@echo %1 %2 %3 %4 %5 %6 %7 %8 %9 

2.执行结果如下: 
a:\>shift 1 1 2 3 4 5 6 7 8 9 10 11(先后跟随11个参数) 
1 2 3 4 5 6 7 8 9 (取最前面9个参数) 

a:\>shift (移位) 
2 3 4 5 6 7 8 9 10 (取另外9个参数) 

a:\>shift (移动)