|
十三
初级用户
积分 143
发帖 10
注册 2004-7-7
状态 离线
|
『楼 主』:
请问有没有批处理的详细教程?
我在网上一直找不到批处理的详细教程。
请问那有?
|
|
2004-7-7 00:00 |
|
|
linux1234
中级用户
积分 293
发帖 42
注册 2003-10-17
状态 离线
|
|
2004-7-8 00:00 |
|
|
linux1234
中级用户
积分 293
发帖 42
注册 2003-10-17
状态 离线
|
『第
3 楼』:
提供一点,不敢说详细,以前收集的,不敢独享,与大家共同学习.
1.批处理命令
批处理文件或批处理程序是一个包含若干MS-DOS命令的正文文件,扩展名为.BAT。
当在命令提示符下敲入批处理程序的名称时,MS-DOS成组执行此批处理程序中的命令。
任何在命令提示符下可使用的命令都可用在批处理程序中。此外,下面MS-DOS命令
是专门在批处理程序中使用的。
可使用COMMAND /Y命令来执行一批处理程序中的命令,并可选择跳过或执行某个命
令。该功能在查找批处理程序的错误时十分有用。更多信息,请参见
2.CALL
从一个批处理程序中调用另一个批处理程序,而不会引起第一个批处理的中止。
语法
CALL [drive:][path]filename [batch-parameters]
参数
[drive:][path]filename
指定要调用的批处理程序的名字及其存放处。文件名必须用.BAT作扩展名。
batch-parameters
指定批处理程序所需的命令行信息。
CALL─注解
使用批处理参数
批处理参数可包含传递给批处理程序的任何信息,包括开关项、文件名、可替
换参数%1至%9,以及环境变量,如%baud%。
使用管道和重定向符
在CALL命令中,不要用管道("|")和重定向符号("<<","",和">>")。
递归调用
可以创建一个批处理程序调用它本身,但必须有一条exit命令。否则,父、子批
处理程序将无限循环下去。
CALL─例子
从另一批处理程序运行CHECKNEW.BAT,在父批处理程序中可包含命令:
call checknew
假设父批处理程序接收两个可替换参数,并希望将它们传给CHECKNEW.BAT。可在父
批理程序中使用命令:
call checknew %1 %2
3.CHOICE
在批处理程序中,提示用户作一选择。显示一指定的提示符并暂停等待用户从一组
指定的键中作出选择。该命令只能用在批处理程序中。
有关ERRORLEVEL参数的详细介绍,见 和 命令。
语法
CHOICE [/C[:]keys] [/N] [/S] [/T[:]c,nn] [text]
参数
text
指出要在提示符前显示的正文。仅当在提示符前的正文中包括有开关字符(/)作
为正文内容时,才要用双引号。如果不指定正文,CHOICE仅显示一个提示符。
开关项
/C[:]keys
指定提示中可接受的按键。显示时,这些键出现在[]内,键之间以逗号分隔,最后
跟一问号。若不指定/C开关,CHOICE采用隐含值YN。冒号(:)是可选项。
/N
让CHOICE不显示提示符,但提示符前的正文仍然显示。若指定了/N开关,所指定的
按键仍有效。
/S
使CHOICE区别大小写字母。若没指定/S,CHOICE对任何用户指定的键,大小写不作
区分。
/T[:]c,nn
在对某一指定关键字作默认设置前,让CHOICE等待一指定秒数的时间。
/T转换中的值如下所设:
c
指定等待nn秒后作为默认值的那个字符。该字符必须出现在/C开关后的按键
集中。
nn
指定暂停的秒数。可接受0-99之间的值。若指定为0,表示默认设置前不暂停。
CHOICE─注解
ERRORLEVEL参数
第一个键的返回值为1,第二个键的返回值为2,第三个键的返回值为3,依此类推。
如果用户按下的键不在指定的键中,CHOICE响一声警铃(即,它向控制台发送字符BEL
或07h)。
如果CHOICE检测到一错误条件,将返回ERRORLEVEL值255。若用户按了CTRL+BREAK
或CTRL+C,CHOICE返回ERRLRLEVEL值0。
在批处理程序中用ERRORLEVEL参数时,可采用递减顺序列出对各返回进行的处理。
CHOICE─例子
在批处理文件用CHOICE时用户所见的信息
如果在批处理文件中采用了以下语法形式:
choice /c:ync
则用户在CHOICE运行时,将看到:
[Y,N,C]?
在上例语句中,加入正文:
choice /c:ync Yes, No, or Continue
CHOICE启动时,用户看到:
Yes, No, or Continue [Y,N,C]?
去掉提示符后用户所见的信息
如下例,在批处理程序中用/N转换把提示符去掉:
choice /n Yes, No, or Continue?
在CHOICE执行时,用户只见到指定的正文:
Yes, No, or Continue?
用了T开关后用户所见的信息
如果在批处理程序中用以下语句:
choice /c:ync /t:n,5
当CHOICE执行时,用户会看到:
[Y,N,C]?
5秒后,用户没按任何键,CHOICE就选择N且返回一个ERRORLEVEL值2。如果5秒内按
下某键,CHOICE返回与用户选择相应对的值。
启动计算机时,若想让用户选择是否要消除C盘的碎片,可在AUTOEXEC.BAT文件中
加入下列语句:
choice Defrag drive /ty,5
if errorlevel 2 goto SkipDefrag
defrag c:
:SkipDefrag
若在5秒内按下N,DEFRAG将不会运行,CHOICE返回ERRORLEVEL值为2。如果5秒内没
按下N,或选择了Y,则对C盘运行DEFRAG。
在批处理程序中使用CHOICE
下面的批处理程序演示如何利用CHOICE选项,让用户选择执行三个程序之一:
MS-DOS编辑器、Microsoft Anti-virus或Microsoft Backup。
注意,这里IF ERRORLEVEL语句是按递减序列出的。如果由CHOICE返回ERRORLEVEL
参数的值大于或等于IF命令所指定的参数,MS-DOS将认为IF语句为真。
@echo off
cls
echo.
echo A Microsoft Editor
echo B Microsoft Anti-Virus
echo C Microsoft Backup
echo.
choice /c:abc Choose an option
if errorlevel 3 goto MSBackup
if errorlevel 2 goto Msav
if errorlevel 1 goto Edit
:Edit
edit
goto End
:Msav
msav
goto End
:Msbackup
msbackup
goto End
:End
4.ECHO
当程序运行时,显示或隐藏批处理程序中的正文。也可用于允许或禁止命令的回显。
在运行批处理程序时,MS-DOS一般在屏幕上显示(回显)批处理程序中的命令。
使用ECHO命令可关闭此功能。
语法
ECHO [ON|OFF]
若要用echo命令显示一条命令,可用下述语法:
echo [message]
参数
ON|OFF
指定是否允许命令的回显。若要显示当前的ECHO的设置,可使用不带参数的ECHO
命令。
message
指定让MS-DOS在屏幕上显示的正文。
相关命令
有关暂停批处理程序执行的方法,请参见命令。
ECHO─注解
用ECHO命令显示信息
当ECHO被关闭时,ECHO message命令很有用。若要显示一若干行长的信息而不显
示其它命令,可在批处理程序中先执行ECHO OFF命令之后,再执行若干个ECHO message
命令。
隐藏命令提示
如果在命令行中使用了ECHO OFF命令,则在屏幕上将不显示命令提示。若要重新
显示命令提示,只需键入ECHO ON即可。
禁止MS-DOS回显一行
在一批处理程序中的某一命令前可以插入一"@"字符,禁止MS-DOS回显此行。
回显一空行
若要在屏幕上回显一空行,可输入ECHO及一个圆点(ECHO.),但其间不能加入空
格。
显示管道及重定向字符
ECHO命令不能显示管道(|)或重定向字符()。
ECHO─例子
下面是一个批处理程序,它包含三行信息,在三行信息前后各有一空行。
echo off
echo.
echo This batch program
echo formats and checks
echo new disks
echo.
如果要关闭ECHO而又不回显ECHO命令本身,则在命令前加一"@"符即可,即:
@echo off
在同一命令行上可使用IF及ECHO命令,如:
if exist *.rpt echo The report has arrived。
5.FOR
对一组文件逐一运行一条命令。该命令可用在批处理文件中,也可命令提示符下
直接调用。
语法
FOR在批处理程序中的使用语法如下:
FOR %%变量 IN (集合) DO 命令 [命令参数]
FOR在命令提示符下的使用语法如下:
FOR %变量 IN (集合) DO 命令 [命令参数]
参数
%%变量或%变量
代表一个可替换的变量。FOR命令将用指定的一组文件中的每一个文本字符串来替
换%%变量(或%变量),直到此命令(在命令参数中指定的)处理完所有的文件为止。
用%%变量来执行一批处理程序中的FOR命令。用%变量来执行命令提示符下的FOR命令。
集合
指定一个或多个要用特定命令对其进行处理的文件或文本字符串。圆括号必须得有。
命令
指定要对一组文件中每一文件进行处理的命令。
命令参数
指定要用于指定命令(如果指定的命令使用了任何参数或开头)的任何参数或开关。
FOR─注解
使用关键字IN及DO
IN和DO并不是参数,但FOR命令中要求这两个关键字。如果省略了这两个关键字,
则MS-DOS将显示一错误信息。
使用可替代变量
除了数字0到9之外,你可把任何字符用作变量,以避免与批处理参数%0到%9的混淆。
对简单的批处理程序来说,象%%F这样的一个单一字符就足够了。在复杂的批处理程序
中,你可把多个值用于变量以区分不同的可替换变量。然而,在同一命令行上不能嵌套
(增加)多个FOR命令。
指定一组文件
集参数可代表一组文件或几组文件。你可用通配符(*及?)来指定一文件集。下面
是合法的文件集:
(*.doc)
(*.doc *.txt *.me)
(jan*.doc jan*.rpt feb*.doc feb*.rpt)
(ar??1991.* ap??1991.*)
当你使用FOR命令时,集中的第一个值将代替%%变量(或%变量),而为了处理此值
MS-DOS将执行指定的命令;此过程一直持续进行,直到MS-DOS将对应于集中的值(或多
值)的所有文件(或多组文件)处理完毕为止。
FOR─例子
假设你想用TYPE命令来显示当前目录下扩展名.DOC或.TXT的所有文件的内容。为了
做到这一点要使用可替代变量%F,并在命令提示符下输下面的命令。
for %f in (*.doc *.txt) do type %f
在此例中,当前目录下扩展名为.DOC或.TXT的每一个文件将代替%F变量,直到显示
出每一个文件的内容为止。若把每一个%F都替换成%%F,则此命令可用于一批处理文件。
否则,MS-DOS将忽略此变量而显示错误信息。
MS-DOS支持你想用于特定命令的开关、管道及重定向符。例如,为了把前一例的输
出送到PRN(默认打印机口),应输入下面的命令:
for %f in (*.doc *.txt) do type %f > prn:
6.GOTO
在批处理文件中,把MS-DOS定向到某一行,这一行由指定的标号来标记。该命令只
能用在批处理文件中。
GOTO命令在批处理文件中把MS-DOS定向到由标号指定的一行。当MS-DOS找到此
标号,就从下一行开始执行命令。
语法
GOTO label
参数
label
指定MS-DOS应转向哪一行。
GOTO─注解
标号的合法值
标号参数不应包含空格、分号和等号之类的分隔符。
GOTO 使用每一标号的前8个字符
GOTO命令只识别标号的前8个字符。因此,标号“hithere01”和“hithere02”都
等价于“hithere0”。
匹配标号参数和批处理文件中的标号
在GOTO命令行中指定的标号必须与批处理文件中的某个标号相匹配。批处理文件
的标号必须以冒号打头。
若指定的标号未包含在批处理文件中,批处理文件将被中止,MS-DOS显示下列
信息:
Label not found
MS-DOS认为以冒号打头的一行是标号,而不是命令,并忽略此行的所有命令。
使用GOTO完成条件操作
GOTO常与其它命令一起使用,以完成条件操作。有关GOTO在条件操作中的使用,
请参阅命令。
GOTO─例子
下面的批处理文件把驱动器A的磁盘格式化为系统盘。若操作成功,GOTO命令就把
MS-DOS定向到“end”标号。
echo off
format a: /s
if not errorlevel 1 goto end
echo An error occurred during formatting.
:end
echo Successfully formatted the disk in drive A.
7.IF
批处理程序中的条件判断语句。若IF命令指定的条件为真,则MS-DOS执行条件下面
的命令;否则,MS-DOS忽略此命令。此命令只能在批处理程序中使用。
语法
IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
参数
NOT
指出若条件为假时,MS-DOS应该执行后面的命令。
ERRORLEVEL number
当上一个应用程序返回的退出码大于等于number这个数时条件为真。
command
指定条件为真时,MS-DOS将执行的命令。
string1==string2
仅当string1和 string2相同时条件为真。这两个值可以是字符串或批处理变量(
例如%1)。字符串不需用引号括起来。
EXIST filename
当filename这个文件存在时条件为真。
IF─例子
下面这个例子用来测试目录是否存在。IF命令不能直接用来测试目录,但空(NUL)
设备存在于硬盘的每一个目录下。因此,可以通过空设备来测试硬盘目录是否存在。
if exist c:\mydir\nul goto process
在下面这个例子中,当MS-DOS未找到PRODUCT.DAT时显示信息"Can't find data
file":
if not exist product.dat echo Can't find data file
每个程序中止时都会返回一个退出码。例如,值为0通常用于表示程序正常执行完
毕。ERRORLEVEL参数用于测试退出码的值。
在下面这个例子中,当格式化驱动器A中的磁盘时,若出错则会显示一条错误信息。
若未出错,则跳过错误信息。
:begin
echo off
format a: /s
if not errorlevel 1 goto end
echo An error occurred during formatting.
:end
echo End of batch program.
使用ERRORLEVEL参数的另一个例子,见命令。
8.PAUSE
暂停批处理程序的执行并显示一条消息,提示用户按任意键继续执行。只能在批处
理程序中使用该命令。
语法
PAUSE
PAUSE─注解
提示用户继续执行批处理程序
MS-DOS在执行PAUSE命令时显示以下消息:
Press any key to continue . . .
:m541
将批处理文件分为若干段
如果按Ctrl+C终止批处理程序,MS-DOS显示以下消息:
Terminate batch job (Y/N)?
如果按Y,则终止批处理程序,返回操作系统。因此,可在可能无需执行的批处理
程序段前加一条PAUSE命令。当批处理程序执行到PAUSE命令时,按Ctrl+C然后按Y,可
终止批处理程序。
PAUSE─例子
如果希望批处理程序提示用户更换驱动器中的磁盘,可创建如下批处理命令:
@echo off
:begin
copy a:*.*
echo Please put a new disk into drive A
pause
goto begin
此例将A盘中的所有文件拷贝到当前目录中。提示在A盘中更换另一张磁盘后,PAUSE
命令暂停批处理程序,这样就有时间更换磁盘,然后按任意键继续执行。批处理程序为
一个死循环程序,GOTO BEGIN命令将执行跳转到批处理文件的begin标号。要终止该批处
理程序,可按Ctrl+C然后按Y。
9.REM
在批处理文件或CONFIG.SYS中加入注解。也可用REM命令来屏蔽命令(在CONFIG.SYS
中也可以用分号(;)代替REM命令,但在批处理文件中则不能替代)。
语法
REM [string]
参数
string
指定要屏蔽的命令或要包含的注解。
相关命令
关于显示消息的信息,请参阅命令。
REM─注解
使用ECHO命令显示注解
REM命令不在屏幕上显示注解。要在屏幕上显示注解时,必须在批处理或文件
CONFIG.SYS中使用ECHO ON命令。
:m550a
批处理文件注解中字符的限制
在批处理文件中不可使用重定向符()或管道字符(|)。
:m550
使用REM加入垂直间隙
虽然可以在批处理文件中用无参数的REM命令加入垂直间隙,但也可以使用空行。
MS-DOS在处理批处理程序时会忽略空行。
REM─例子
下例的批处理文件中使用了REM命令,用它作为注释和加入垂直间隙:
@echo off
rem This batch program formats and checks new disks.
rem It is named CHECKNEW.BAT.
rem
echo Insert new disk in drive B.
pause
format b: /v
chkdsk b:
下例在CONFIG.SYS文件中的COUNTRY命令前加入一条注解:
rem Set country code to France
country=033
下例用分号(;)代替REM命令,屏蔽DEVICE命令:
;device=c:\dos\ramdrive.sys
10.SET
显示,设置或删除MS-DOS环境变量。
使用环境变量可以控制某些批处理文件和程序的行为,可以控制MS-DOS显示与工
作的方式。一般在AUTOEXEC.BAT或CONFIG.SYS文件中用SET命令,以便每次启动计算
机时都自动设置环境变量。
语法
SET [variable=[string]]
使用以下语法显示当前环境设置:
SET
参数
variable
指定要设置或修改的环境变量。
string
指定与环境变量相关的字符串。
相关命令
关于设置MS-DOS控制自身操作的环境变量的信息,可参阅命令、
命令、命令和命令。
SET─注解
显示当前环境设置
只键入无参数的SET命令就可显示当前环境设置。这些设置一般包括COMSPEC和
PATH环境变量,MS-DOS用它们帮助在磁盘上寻找程序。PROMPT、DIRCMD和COPYCMD为
MS-DOS使用的其它环境变量。关于DIRCMD更多的信息,请参阅命令。
使用参数
当使用SET指定了variable和string的值时,MS-DOS将指定变量及相关字符串加
到环境中。如果环境中已有该变量,则用新的字符串代替老的字符串。
如果在使用SET命令时指定了变量和等号(无字符串),则MS-DOS清除与此变量相
关的字符串(就象没有定义该环境变量一样)。
:m560a
在批处理文件中使用SET
在创建批处理文件时,可用SET命令创建环境变量。并将它们与%0到%9一样使用。
也可将变量%0到%9作为SET命令的输入。
:m560
在批处理文件中调用环境变量
从批处理文件中调用环境变量值时,必须用百分符(%)将变量值括起来。例如,
如果批处理文件创建了一个名为BAUD的环境变量,将%BAUD%插入到命令行,就可把与
BAUD相关的字符串作为可替换的参数使用。
:m560b
SET对环境空间的影响
使用SET命令后,MS-DOS可能会显示以下信息:
Out of environment space
该信息表明已没有环境变量空间容纳新的环境变量.关于怎样增加环境变量空间的
信息,请参阅命令。
使用 COPYCMD 环境
你可以设置COPYCMD环境变量,指定COPY, MOVE和XCOPY命令是否先给出提示,经
确认后再覆盖文件。
若强制要求COPY、MOVE和XCOPY命令在所有情况下均先给出提示,后进行覆盖,
就把COPYCMD环境变量设置成/-Y。若强制要求这些命令在所有情况下不提示就进行
覆盖,则把COPYCMD环境变量设置成/Y。
在这些命令中键入的/Y或/-Y开关,优先于COPYCMD环境变量的所有默认值和当前值。
SET─例子
要设置名为INCLUDE的变量,使它等于字符串C:\INC(C盘中的INC目录),可键入
以下命令:
set include=c:\inc
在批处理文件可用%INCLUDE%代替C:\INC.例如,可在批处理文件中包括以下命
令,显示INCLUDE环境变量表示的目录内容:
dir %include%
当MS-DOS处理该命令时,会用字符串C:\INC代替%INCLUDE%。
SET命令在批处理程序中的另一种用法是在PATH环境变量中加入新目录,例如:
@echo off
rem ADDPATH.BAT adds a new directory
rem to the PATH environment variable。
set path=%1;%path%
set
11.SHIFT
改变批处理程序中可替换参数的位置。
语法
SHIFT
SHIFT─注解
SHIFT命令如何工作
SHIFT命令通过将每一个参数拷贝到前一个参数来改变可替换参数%0到%9的值。也
就是%1的值被拷贝到%0,%2的值被拷贝到%1等等。此命令对用一系列参数完成同样操作
的批处理文件很有用。
:m567
使用10个以上的命令行参数
使用SHIFT命令还可在批处理文件中接收多于10个的命令行参数。如果指定的命令
行参数超过10个,则在第10个参数(%9)之后出现的参数将依次被替换到(%9)。
替换参数的恢复
SHIFT命令不可逆。一旦执行了SHIFT命令,就不能恢复SHIFT 命令之前的第一个参
数(%0)。
SHIFT─例子
下面的批处理文件MYCOPY.BAT说明怎样用SHIFT命令处理任意多个命令行参数,将一
系列文件拷贝到一个指定的目录。使用的参数是目录名和后面的一系列文件名。
@echo off
rem MYCOPY.BAT copies any number of files
rem to a directory。
rem The command uses the following syntax:
rem mycopy dir file1 file2 ...
set todir=%1
:getfile
shift
if "%1"=="" goto end
copy %1 %todir%
goto getfile
:end
set todir=
echo All done
|
|
2004-7-8 00:00 |
|
|
十三
初级用户
积分 143
发帖 10
注册 2004-7-7
状态 离线
|
『第
4 楼』:
在问一下。
choice命令在DOS7.1下无用?
|
|
2004-7-8 00:00 |
|
|
十三
初级用户
积分 143
发帖 10
注册 2004-7-7
状态 离线
|
『第
5 楼』:
是用不了。
版版来都我一下。我想用它用启动菜单。
谢谢了
|
|
2004-7-9 00:00 |
|
|
bush
银牌会员
积分 2165
发帖 730
注册 2004-4-21
状态 离线
|
『第
6 楼』:
choice外部命令,有这个程序才行
|
|
2004-7-9 00:00 |
|
|
十三
初级用户
积分 143
发帖 10
注册 2004-7-7
状态 离线
|
『第
7 楼』:
Quote: | 以下是引用bush在2004-7-9 上午 03:11:17的发言:
choice外部命令,有这个程序才行 |
|
请问是什么程序?
|
|
2004-7-9 00:00 |
|
|
linux1234
中级用户
积分 293
发帖 42
注册 2003-10-17
状态 离线
|
『第
8 楼』:
choice在dos7.10中就有
|
|
2004-7-13 00:00 |
|
|
十三
初级用户
积分 143
发帖 10
注册 2004-7-7
状态 离线
|
『第
9 楼』:
Quote: | 以下是引用linux1234在2004-7-13 上午 01:31:59的发言:
choice在dos7.10中就有 |
|
可这个命令在7.10下用不了啊??!!
|
|
2004-7-13 00:00 |
|