BAT⽂件语法和技巧(bat⽂件的编写及使⽤)
BAT⽂件语法和技巧(bat⽂件的编写及使⽤)(转载⼀)
⽐较有⽤的东⽐较有⽤的东西
⾸先,批处理⽂件是⼀个⽂本⽂件,这个⽂件的每⼀⾏都是⼀条DOS命令(⼤部分时候就好象我们在DOS提⽰符下执⾏的命令⾏⼀样),你可以使⽤DOS下的Edit或者Windows的记事本(notepad)等任何⽂本⽂件编辑⼯具创建和修改批处理⽂件。
其次,批处理⽂件是⼀种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运⾏的流程,在批处理中也可以使⽤循环语句(for)来循环执⾏⼀条命令。当然,批处理⽂件的编程能⼒与C语⾔等编程语句⽐起来是⼗分有限的,也是⼗分不规范的。批处理的程序语句就是⼀条条的DOS命令(包括内部命令和外部命令),⽽批处理的能⼒主要取决于你所使⽤的命令。
第三,每个编写好的批处理⽂件都相当于⼀个DOS的外部命令,你可以把它所在的⽬录放到你的DOS搜索路径(path)中来使得它可以在任意位置运⾏。⼀个良好的习惯是在硬盘上建⽴⼀个bat或者batch⽬录(例如C:\BATCH),然后将所有你编写的批处理⽂件放到该⽬录中,这样只要在path中设置上c:\batch,你就可以在任意位置运⾏所有你编写的批处理程序。
第四,在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
批处理的作⽤
简单的说,批处理的作⽤就是⾃动的连续执⾏多条命令。
这⾥先讲⼀个最简单的应⽤:在启动wps软件时,每次都必须执⾏(>前⾯内容表⽰DOS提⽰符):
C:\>cd wps
C:\WPS>spdos
C:\WPS>py
C:\WPS>wbx
C:\WPS>wps
如果每次⽤WPS之前都这样执⾏⼀遍,您是不是觉得很⿇烦呢?
好了,⽤批处理,就可以实现将这些⿇烦的操作简单化,⾸先我们编写⼀个runwps.bat批处理⽂件,内容如下:
@echo off批处理文件怎么做
c:
cd\wps
spdos
py
wbx
wps
cd\
以后,我们每次进⼊wps,只需要运⾏runwps这个批处理⽂件即可。
常⽤命令
echo、@、call、pause、rem(⼩技巧:⽤::代替rem)是批处理⽂件最常⽤的⼏个命令,我们就从他们开始学起。
echo 表⽰显⽰此命令后的字符
echo off 表⽰在此语句后所有运⾏的命令都不显⽰命令⾏本⾝
@与echo off相象,但它是加在每个命令⾏的最前⾯,表⽰运⾏时不显⽰这⼀⾏的命令⾏(只能影响当前⾏)。
call 调⽤另⼀个批处理⽂件(如果不⽤call⽽直接调⽤别的批处理⽂件,那么执⾏完那个批处理⽂件后将⽆法返回当前⽂件并执⾏当前⽂件的后续命令)。
pause 运⾏此句会暂停批处理的执⾏并在屏幕上显⽰Press any key 的提⽰,等待⽤户按任意键后继续
rem 表⽰此命令后的字符为解释⾏(注释),不执⾏,只是给⾃⼰今后参考⽤的(相当于程序中的注释)。
例1:⽤edit编辑a.bat⽂件,输⼊下列内容后存盘为c:\a.bat,执⾏该批处理⽂件后可实现:将根⽬录中所有⽂件写⼊ a.txt中,启动UCDOS,进⼊WPS等功能。
批处理⽂件的内容为: 命令注释:
@echo off 不显⽰后续命令⾏及当前命令⾏
dir c:\*.* & 将c盘⽂件列表写⼊a.txt
call c:\ucdos\ucdos.bat 调⽤ucdos
echo 你好 显⽰"你好"
pause 暂停,等待按键继续
rem 准备运⾏wps 注释:准备运⾏wps
cd ucdos 进⼊ucdos⽬录
wps 运⾏wps
批处理⽂件的参数
批处理⽂件还可以像C语⾔的函数⼀样使⽤参数(相当于DOS命令的命令⾏参数),这需要⽤到⼀个参数表⽰符"%"。
%[1-9]表⽰参数,参数是指在运⾏批处理⽂件时在⽂件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表⽰批处理命令本⾝,其它参数字符串⽤%1到%9顺序表⽰。
例2:C:根⽬录下有⼀批处理⽂件名为f.bat,内容为:
@echo off
format %1
如果执⾏C:\>f a:
那么在执⾏f.bat时,%1就表⽰a:,这样format %1就相当于format a:,于是上⾯的命令运⾏时实际执⾏的是format a:
例3:C:根⽬录下⼀批处理⽂件名为t.bat,内容为:
@echo off
type %1
type %2
那么运⾏C:\> b.txt
%1 : 表⽰a.txt
%2 : 表⽰b.txt>
于是上⾯的命令将顺序地显⽰a.txt和b.txt⽂件的内容。
特殊命令
if goto choice for是批处理⽂件中⽐较⾼级的命令,如果这⼏个你⽤得很熟练,你就是批处理⽂件的专家啦。
⼀、if 是条件语句,⽤来判断是否符合规定的条件,从⽽决定执⾏不同的命令。有三种格式:
1、if [not] "参数" == "字符串" 待执⾏的命令
参数如果等于(not表⽰不等,下同)指定的字符串,则条件成⽴,运⾏命令,否则运⾏下⼀句。
例:if "%1"=="a" format a:
2、if [not] exist [路径\]⽂件名待执⾏的命令
如果有指定的⽂件,则条件成⽴,运⾏命令,否则运⾏下⼀句。
如: if exist c:\config.sys type c:\config.sys
表⽰如果存在c:\config.sys⽂件,则显⽰它的内容。
3、if errorlevel <;数字> 待执⾏的命令
很多DOS程序在运⾏结束后会返回⼀个数字值⽤来表⽰程序运⾏的结果(或者状态),通过if errorlevel命令可以判断程序的返回值,根据不同的返回值来决定执⾏不同的命令(返回值必须按照从⼤到⼩的顺序排列)。如果返回值等于指定的数字,则条件成⽴,运⾏命令,否则运⾏下⼀句。
如if errorlevel 2 goto x2
⼆、goto 批处理⽂件运⾏到这⾥将跳到goto所指定的标号(标号即label,标号⽤:后跟标准字符串来定义)处,goto语句⼀般与if 配合使⽤,根据不同的条件来执⾏不同的命令组。
如:
goto end
:end
echo this is the end
标号⽤":字符串"来定义,标号所在⾏不被执⾏。
三、choice 使⽤此命令可以让⽤户输⼊⼀个字符(⽤于选择),从⽽根据⽤户的选择返回不同的errorlevel,然后于if errorlevel配合,根据⽤户的选择运⾏不同的命令。
注意:choice命令为DOS或者Windows系统提供的外部命令,不同版本的choice命令语法会稍有不同,请⽤choice /?查看⽤法。
choice的命令语法(该语法为Windows 2003中choice命令的语法,其它版本的choice的命令语法与此⼤同⼩异):CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]
描述:
该⼯具允许⽤户从选择列表选择⼀个项⽬并返回所选项⽬的索引。
参数列表:
/C choices 指定要创建的选项列表。默认列表是 "YN"。
/N 在提⽰符中隐藏选项列表。提⽰前⾯的消息得到显⽰,选项依旧处于启⽤状态。
/CS 允许选择分⼤⼩写的选项。在默认情况下,这个⼯具是不分⼤⼩写的。
/T timeout 做出默认选择之前,暂停的秒数。可接受的值是从 0 到 9999。如果指定了 0,就不会有暂停,默认选项
会得到选择。
/D choice 在 nnnn 秒之后指定默认选项。字符必须在⽤ /C 选项指定的⼀组选择中; 同时,必须⽤ /T 指定nnnn。
/M text 指定提⽰之前要显⽰的消息。如果没有指定,⼯具只显⽰提⽰。
/? 显⽰帮助消息。
注意:
ERRORLEVEL 环境变量被设置为从选择集选择的键索引。列出的第⼀个选择返回 1,第⼆个选择返回 2,等等。如果⽤户按的键不是有效的选择,该⼯具会发出警告响声。如果该⼯具检测到错误状态,它会返回 255 的ERRORLEVEL 值。如果⽤户按 Ctrl+Break 或 Ctrl+C 键,该⼯具会返回 0 的 ERRORLEVEL 值。在⼀个批程序中使⽤ ERRORLEVEL 参数时,将参数降序排列。
⽰例:
CHOICE /?
CHOICE /C YNC /M "确认请按 Y,否请按 N,或者取消请按 C。"
CHOICE /T 10 /C ync /CS /D y
CHOICE /C ab /M "选项 1 请选择 a,选项 2 请选择 b。"
CHOICE /C ab /N /M "选项 1 请选择 a,选项 2 请选择 b。"
如果我运⾏命令:CHOICE /C YNC /M "确认请按 Y,否请按 N,或者取消请按 C。"
屏幕上会显⽰:
确认请按 Y,否请按 N,或者取消请按 C。 [Y,N,C]?
例:test.bat的内容如下(注意,⽤if errorlevel判断返回值时,要按返回值从⾼到低排列):
@echo off
choice /C dme /M "defrag,mem,end"
if errorlevel 3 goto end
if errorlevel 2 goto mem
if errotlevel 1 goto defrag
:defrag
c:\dos\defrag
goto end
:mem
mem
goto end
:end
echo good bye
此批处理运⾏后,将显⽰"defrag,mem,end[D,M,E]?" ,⽤户可选择d m e ,然后if语句根据⽤户的选择作出判断,d表⽰执⾏标号为defrag的程序段,m表⽰执⾏标号为mem的程序段,e表⽰执⾏标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显⽰good bye,批处理运⾏结束。
四、for 循环命令,只要条件符合,它将多次执⾏同⼀命令。
语法:
对⼀组⽂件中的每⼀个⽂件执⾏某个特定命令。
FOR %%variable IN (set) DO command [command-parameters]
%%variable 指定⼀个单⼀字母可替换的参数。
(set) 指定⼀个或⼀组⽂件。可以使⽤通配符。
command 指定对每个⽂件执⾏的命令。
command-parameters 为特定命令指定参数或命令⾏开关。
例如⼀个批处理⽂件中有⼀⾏:
for %%c in (*.bat *.txt) do type %%c
则该命令⾏会显⽰当前⽬录下所有以bat和txt为扩展名的⽂件的内容。
批处理⽰例
1. IF-EXIST
1)
⾸先⽤记事本在C:\建⽴⼀个test1.bat批处理⽂件,⽂件内容如下:
@echo off
IF EXIST \AUTOEXEC.BAT TYPE \AUTOEXEC.BAT
IF NOT EXIST \AUTOEXEC.BAT ECHO \AUTOEXEC.BAT does not exist
然后运⾏它:
C:\>TEST1.BAT
如果C:\存在AUTOEXEC.BAT⽂件,那么它的内容就会被显⽰出来,如果不存在,批处理就会提⽰你该⽂件不存在。
2)
接着再建⽴⼀个test2.bat⽂件,内容如下:
@ECHO OFF
IF EXIST \%1 TYPE \%1
IF NOT EXIST \%1 ECHO \%1 does not exist
C:\>TEST2 AUTOEXEC.BAT
该命令运⾏结果同上。
说明:
(1) IF EXIST 是⽤来测试⽂件是否存在的,格式为
IF EXIST [路径+⽂件名] 命令
(2) test2.bat⽂件中的%1是参数,DOS允许传递9个批参数信息给批处理⽂件,分别为%1~%9(%0表⽰test2命令本⾝) ,这有点象编程中的实参和形参的关系,%1是形参,AUTOEXEC.BAT是实参。
3) 更进⼀步的,建⽴⼀个名为TEST3.BAT的⽂件,内容如下:
@echo off
IF "%1" == "A" ECHO XIAO
IF "%2" == "B" ECHO TIAN
IF "%3" == "C" ECHO XIN
如果运⾏:
C:\>TEST3 A B C
屏幕上会显⽰:
XIAO
TIAN
XIN
如果运⾏:
C:\>TEST3 A B
屏幕上会显⽰
XIAO
TIAN
在这个命令执⾏过程中,DOS会将⼀个空字符串指定给参数%3。
2、IF-ERRORLEVEL
建⽴TEST4.BAT,内容如下:
@ECHO OFF
XCOPY C:\AUTOEXEC.BAT D:IF ERRORLEVEL 1 ECHO ⽂件拷贝失败
IF ERRORLEVEL 0 ECHO 成功拷贝⽂件
然后执⾏⽂件:
C:\>TEST4
如果⽂件拷贝成功,屏幕就会显⽰"成功拷贝⽂件",否则就会显⽰"⽂件拷贝失败"。
IF ERRORLEVEL 是⽤来测试它的上⼀个DOS命令的返回值的,注意只是上⼀个命令的返回值,⽽且返回值必须依照从⼤到⼩次序顺序判断。因此下⾯的批处理⽂件是错误的:
@ECHO OFF
XCOPY C:\AUTOEXEC.BAT D:\
IF ERRORLEVEL 0 ECHO 成功拷贝⽂件
IF ERRORLEVEL 1 ECHO 未到拷贝⽂件
IF ERRORLEVEL 2 ECHO ⽤户通过ctrl-c中⽌拷贝操作
IF ERRORLEVEL 3 ECHO 预置错误阻⽌⽂件拷贝操作
IF ERRORLEVEL 4 ECHO 拷贝过程中写盘错误
⽆论拷贝是否成功,后⾯的:
未到拷贝⽂件
⽤户通过ctrl-c中⽌拷贝操作
预置错误阻⽌⽂件拷贝操作
拷贝过程中写盘错误
都将显⽰出来。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论