windows batch语法

windows BATCH基本知识
扩充名是bat(在nt/2000/xp/2003下也能够是cmd)的文件就是批处理公事。

==== 注 =======================================
.bat是dos下的批处理文件
.cmd是nt内核命令行环境的另一种批处理公事
从更广义的角度来看,unix的shell脚本以及其余操作系统甚至应用程序中由外壳举办表明施行的文本,都怀有与批处理公事分外相似的效应,而且同样是由专用解释器以行为单位表达施行,这种文本形式更通用的名目是脚本语言。所以从某个程度分析,batch,
unix shell, awk, basic, perl

等脚本语言都是同等的,只然则应用的限量和演说的平台各有不同而已。甚至有点应用程序如故沿用批处理这一称呼,而其内容和增添名与dos的批处理却又完全不同。

第一批处理文件是一个文本文件,这些文件的每一行都是一条DOS命令(大部分时候就好象大家在DOS指示符下执行的命令行一样),你能够行使DOS下的Edit或者Windows的记事本(notepad)等另外文件文件编写工具创造和改动批处理公事。

==== 注 ===================

批处理文件中完全可以运用非dos命令,甚至足以行使不持有可实施特性的平日数据性文件,这出自windows系统那些最新解释平台的涉入,使得批处理的采取更加”边缘化”。所以大家谈论的批处理相应界定在dos环境仍然命令行环境中,否则广大观念和设定都急需做相比大的变动。

帮忙,批处理公事是一种简单的程序,可以透过规范语句(if)和流程控制语句(goto)来决定命令运行的流水线,在批处理中也足以行使循环语句(for)来循环执行一条命令。当然,批处理文件的编程能力与C语言等编程语句比起来是那多少个简单的,也是不行不标准的。批处理的顺序语句就是一条条的DOS命令(包括内部命令和外部命令),而批处理的能力根本取决于你所利用的下令。

==== 注 ==================
批处理公事(batch file)也得以称为批处理程序(batch
program),这点与编译型语言有所不同,就c语言来说,扩张名为c或者cpp的文书可以称呼c语言文件或者c语言源代码,但只有编译连接后的

exe文件才足以称作c语言程序。因为批处理公事本身既有着文本的可读性,又富有程序的可执行性,这多少个称谓的底限是对比模糊的。

其三,每个编写好的批处理公事都一定于一个DOS的外部命令,你可以把它所在的目录放到你的DOS搜索路径(path)中来驱动它可以在随意地方运行。一个美好的习惯是在硬盘上创立一个bat或者batch目录(例如C:\BATCH),然后将富有你编写的批处理公事放到该目录中,这样一旦在path中设置上c:\batch,你就可以在随心所欲地方运行具有你编写的批处理程序。

==== 注 =====
纯以dos系统而言,可执行程序大约可以分开为五类,遵照执行优先级由高到低排列分别是:DOSKEY宏命令(预先驻留内存),COMMAND.COM中的内部命令(按照内存的环境随时进驻内存),以com为扩大名的可执行程序(由command.com
直接载入内存),以exe位扩展名的可执行程序(由command.com
重定位后载入内存),以bat位增加名的批处理程序(由command.com

演说分析,遵照其情节按优先级顺序调用第2,3,4,5种可执行程序,分析一行,执行一行,文件本身不载入内存)

第四,在DOS和Win9x/Me系统下,C:盘根目录下的AUTOEXEC.BAT批处理文件是全自动运行批处理公事,每回系统启动时会自动运行该文件,你可以将系统每一遍启动时都要运行的吩咐放入该公文中,例如设置搜索路径,调入鼠标驱动和磁盘缓存,设置系统环境变量等。上边是一个周转于Windows
98下的autoexec.bat的示范:
@ECHO OFF
PATH
C:\WINDOWS;C:\WINDOWS\COMMAND;C:\UCDOS;C:\DOSTools;<br>
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
==== 注 =====
AUTOEXEC.BAT为DOS系统的自发性运行批处理公事,由COMMAND.COM启动时解释施行;
而在Win9x环境中,不仅平添扶助了 金河田TART.BAT, WINSTART.BAT
等居多其他活动运行的批处理公事,对AUTOEXEC.BAT 也大增了 .DOS .W40 .BAK
.OLD .PWS 等许多变体以适应复杂的环境和变异的急需。
==== willsort 编注 =============

下关于命令的分类,有广大值得推敲的地方。常用命令中的@本不是命令,而dir、copy等也很常用的一声令下却尚无列入,
而特殊命令中兼有命令对自己的话都是常用命令。提出将批处理所引述的命令分为内部命令、外部命令、第三方程序三类。而其中命令和外部命令中别有一类是专用于或常用于批处理中的命令可称为”批处理命令”。

以下摘录MS-DOS 6.22
襄助文档中有关”批处理命令”的文字,当然,其中多少概念和概念已经有些落伍了。

批处理命令

批处理公事或批处理程序是一个包含若干MS-DOS命令的正文文件,扩展名为.BAT。当在指令提醒符下敲入批处理程序的名目时,MS-DOS成组执行此批处理程序中的命令。

另外在指令指示符下可利用的吩咐都可用在批处理程序中。其余,下边MS-DOS命令是专门在批处理程序中行使的。

常用命令

echo、@、call、pause、rem(小技巧:用::代替rem)是批处理文件最常用的多少个指令,我们就从她们开头学起。

==== 注 ===========
率先, @ 不是一个发令, 而是DOS 批处理的一个特有标记符,
仅用于屏蔽命令行回显.
下边是DOS命令行或批处理中或许会见到的部分例外标记符:
CR(0D) 命令行结束符
Escape(1B) ANSI转义字符指引符
Space(20) 常用的参数界定符
Tab(09) ; = 不常用的参数界定符

  • COPY命令文件连接符
    * ? 文件通配符
    “” 字符串界定符
    | 命令管道符
    < > >> 文件重定向符
    @ 命令行回显屏蔽符
    / 参数开关带领符
    : 批处理标签指引符
    % 批处理变量辅导符

其次, :: 确实可以起到rem 的注释效用, 而且更简洁有效; 但有两点需要小心:
率先, 除了 :: 之外, 任何以 :开首的字符行, 在批处理中都被看成标号,
而直接忽略其后的享有内容, 只是为着与健康的标号相区别, 提议利用 goto
所不可以辨其余标注, 即在 :后紧跟一个非字母数字的一个出奇符号.
第 二, 与rem 不同的是, ::后的字符行在举办时不会回显, 无论是否用echo
on打开命令行回显状态, 因为命令解释器不觉得她是一个灵光的命令行,
就此点来看, rem 在某些场面下将比 :: 更为适用; 其余, rem 可以用来

config.sys 文件中.

echo 表示呈现此命令后的字符
echo off 表示在此语句后具备运行的下令都不显得命令行本身
@与echo
off相象,但它是加在每个命令行的最前边,表示运行时不显得这一行的命令行(只能影响当下行)。
call
调用另一个批处理公事(假如不用call而直接调用其余批处理文件,那么执行完这一个批处理公事后将不可能回来当前文件并履行当前文件的接续命令)。
pause 运行此句会暂停批处理的进行并在屏幕上呈现Press any key to
continue…的唤醒,等待用户按任意键后连续
rem
代表此命令后的字符为解释行(注释),不举行,只是给自己将来参考用的(相当于程序中的注释)。
==== 注 =====
此地的叙述比较混乱, 不如直接引用个指令的命令行帮忙更为系统


ECHO

当程序运行时,显示或隐藏批处理程序中的正文。也可用于允许或禁止命令的回显。

在运作批处理程序时,MS-DOS一般在屏幕上出示(回显)批处理程序中的命令。
行使ECHO命令可关闭此功用。

语法

ECHO [ON|OFF]

若要用echo命令呈现一条命令,可用下述语法:

echo [message]

参数

ON|OFF
指定是否同意命令的回显。若要突显当前的ECHO的装置,可利用不带参数的ECHO
命令。

message
点名让MS-DOS在屏幕上显得的正文。


CALL

从一个批处理程序中调用另一个批处理程序,而不会挑起第一个批处理的间歇。

语法

CALL [drive:][path]filename [batch-parameters]

参数

[drive:][path]filename
点名要调用的批处理程序的名字及其存放处。文件名必须用.BAT作扩大名。

batch-parameters
点名批处理程序所需的命令行信息。


PAUSE

暂停批处理程序的推行并出示一条消息,指示用户按任意键继续执行。只好在批处
理程序中应用该命令。

语法

PAUSE

REM

在批处理公事或CONFIG.SYS中参与声明。也可用REM命令来遮掩命令(在CONFIG.SYS
中也得以用分号 ; 代替REM命令,但在批处理文件中则不能够代替)。

语法

REM [string]

参数

string

点名要屏蔽的吩咐或要包含的注明。

例1:用edit编辑a.bat文件,输入下列内容后存盘为c:\a.bat,执行该批处理公事后可实现:将根目录中享有文件写入
a.txt中,启动UCDOS,进入WPS等效果。

  批处理公事的情节为:         命令注释:

    @echo off           不显得连续命令行及当前命令行
    dir c:\*.* >a.txt       将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:\>t a.txt b.txt
%1 : 表示a.txt
%2 : 表示b.txt
于是下面的指令将顺序地显示a.txt和b.txt文件的内容。

==== 注 ===============
参 数在批处理中也视作变量处理, 所以同样选拔百分号作为携带符,
其后跟0-9中的一个数字构成参数引用符. 引用符和参数之间 (例如上文中的 %1
与 a: ) 的关系近乎于变量指针与变量值的关系.
当大家要引用第十一个或更多少个参数时, 就亟须移动DOS 的参数开首指针. shift
命令正担任了这些活动指针的角色, 它将参数的发端指针移动到下一个参数,
类似C 语言中的指针操作. 图示如下:

起始状态, cmd 为命令名, 可以用 %0 引用
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9

通过1次shift后, cmd 将不能被引述
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9

透过2次shift后, arg1也被丢弃, %9指向为空, 没有引用意义
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8

不满的是, win9x 和DOS下均不援助 shift 的逆操作. 只有在 nt
内核命令行环境下, shift 才支撑 /n 参数,

可以以第一参数为尺度返复移动起头指针.

非同通常命令

if goto choice
for是批处理公事中相比高级的命令,假诺这么些你用得很内行,你就是批处理公事的我们啦。

一、if 是原则语句,用来判断是否符合规定的尺度,从而控制推行不一的下令。
有二种格式:

1、if [not] “参数” == “字符串” 待执行的指令

参数假如等于(not表示不等,下同)指定的字符串,则条件建立,运行命令,否则运行下一句。

例:if “%1″==”a” format a:

====

if 的命令行匡助中关于此点的叙述为:
IF [NOT] string1==string2 command
在此有以下几点需要小心:

  1. 蕴含字符串的双引号不是语法所不可不的,
    而只是习惯上接纳的一种”防空”字符
  2. string1 未必是参数, 它也得以是环境变量,
    循环变量以及另外字符串常量或变量
  3. command 不是语法所不可不的, string2

    后跟一个空格就足以组成一个实惠的下令行

2、if [not] exist [路径\]文件名 待执行的指令
一经有指定的文书,则条件建立,运行命令,否则运行下一句。

如: if exist c:\config.sys type c:\config.sys
表示假设存在c:\config.sys文件,则显得它的始末。

****** 注 ********
也可以动用以下的用法:
if exist command
device 是指DOS系统中已加载的设备, 在win98下一般有:
AUX, PRN, CON, NUL
COM1, COM2, COM3, COM4
LPT1, LPT2, LPT3, LPT4
XMSXXXX0, EMMXXXX0
A: B: C: …,
CLOCK$, CONFIG$, DblBuff$, IFS$HLP$
切实的始末会因硬软件条件的不等而略有差别, 使用这个装备名称时,
需要确保以下三点:

  1. 该设施确实存在(由软件虚拟的配备除外)
  2. 该装备驱动程序已加载(aux, prn等专业配备由系统缺省定义)
  3. 该装置已准备好(紧假设指a: b: …, com1…, lpt1…等)
    可通过命令 mem/d | find “device” /i 来检阅你的连串中所加载的装置
    另 外, 在DOS系统中, 设备也被认为是一种特有的公文,
    而文件也得以称作字符设备;
    因为设备(device)与公事都是应用句柄(handle)来保管的, 句柄就是名字,
    类似于文件名, 只可是句柄不是利用于磁盘管理, 而是应用于内存管理而已,

    所谓设备加载也即指在内存中为其分配可援引的句柄.

3、if errorlevel <数字> 待执行的指令


多DOS程序在运转停止后会再次回到一个数字值用来表示程序运行的结果(或者状态),通过if
errorlevel命令可以判明程序的再次回到值,依据不同的重回值来支配实施不同的指令(重返值必须依据从大到小的顺序排列)。尽管再次来到值等于指定的数字,则条件建立,运行命令,否则运行下一句。

如if errorlevel 2 goto x2

==== 注 ===========
再次来到值从大到小的顺序排列不是必须的, 而只是执行命令为 goto 时的习惯用法,
当使用 set 作为执行命令时, 通常会从小到楚国序排列,
比如需将再次来到码置入环境变量, 就需拔取以下的顺序形式:

if errorlevel 1 set el=1
if errorlevel 2 set el=2
if errorlevel 3 set el=3
if errorlevel 4 set el=4
if errorlevel 5 set el=5

自然, 也得以行使以下循环来顶替, 原理是同一的:
for %%e in (1 2 3 4 5 6 7 8…) do if errorlevel %%e set el=%%e

更快捷简明的用法, 能够参考我写的另一篇有关获取 errorlevel 的小说

出 现此种现象的原因是, if errorlevel 相比较再次来到码的论断标准并非等于,
而是大于等于. 由于 goto 的跳转特性,
由小到大排序会导致在较小的回来码处就跳出; 而鉴于 set命令的 “重复”
赋值特性, 由大到小排序会促成较小的归来码 “覆盖” 较大的归来码.

另外, 固然 if errorlevel=<数字> command 也是行得通的命令行, 但也只是

command.com 解释命令行时将 = 作为命令行切分符而忽略掉罢了

二、goto
批处理公事运行到这边将跳到goto所指定的标注(标号即label,标号用:后跟专业字符串来定义)处,goto语句一般与if配合使用,遵照不同的规则来实施不一的命令组。

如:

goto end

:end
echo this is the end

标明用”:字符串”来定义,标号所在行不被实践。

==== willsort 编注

label 常被译为 “标签” , 然则这并不有所普遍的约定性.

goto 与 : 联用可实现执行中途的跳转, 再组成 if 可实现执行过程的准绳分支,
六个 if 即可兑现命令的分组, 类似 C 中 switch case 结构仍然 Basic 中的
select case 结构, 大规模且结构化的下令分组即可兑现高级语言中的函数效率.
以下是批处理和C/Basic在语法结构上的对待:

Batch C / Basic
goto&: goto&:
goto&:&if if{}&else{} / if&elseif&endif
goto&:&if… switch&case / select case

goto&:&if&set&envar… function() / function(),sub()

三、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。”

==== willsort 编注 ===============================
自己列出win98下choice的用法扶助, 已资区分

Waits for the user to choose one of a set of choices.
伺机用户挑选一组待选字符中的一个

CHOICE [/C[:]choices] [/N] [/S] [/T[:]c,nn] [text]

/C[:]choices Specifies allowable keys. Default is YN
点名允许的按键(待选字符), 默认为YN
/N Do not display choices and ? at end of prompt string.
不显得指示字符串中的问号和待选字符
/S Treat choice keys as case sensitive.
拍卖待选字符时高低写敏感
/T[:]c,nn Default choice to c after nn seconds
在 nn 秒后默认选项 c
text Prompt string to display
要出示的提醒字符串
ERRORLEVEL is set to offset of key user presses in choices.
ERRORLEVEL 被装置为用户键入的字符在待选字符中的偏移值
一经我运行命令: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 errorlevel 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为扩充名的公文的始末。

==== willsort 编注

亟需指出的是, 当()中的字符串并非单个或五个文件名时,
它将独自被当作字符串替换, 那个特点再添加()中得以放手三个字符串的表征,
很醒目 for 可以被作为一种遍历型循环.
自然, 在 nt/2000/xp/2003 连串的通令行环境中, for 被赋予了更多的风味,
使之可以分析命令输出或者文件中的字符串,

也有好多开关被用来扩张了文本替换功用.

批处理示例

  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是实参。

==== willsort 编注

DOS没有 “允许传递9个批参数音讯” 的限定,
参数的个数只会受到命令行长度和所调用命令处理能力的限制. 不过,
大家在批处理程序中, 在同等时刻只可以同时援引10个参数, 因为 DOS只交付了

%0~%9这十个参数引用符.

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中止拷贝操作
预置错误阻止文件拷贝操作
拷贝过程中写盘错误

都将显得出来。

以下就是多少个常用命令的重返值及其代表的意思:

backup
0 备份成功
1 未找到备份文件
2 文件共享争持阻止备份完成
3 用户用ctrl-c中止备份
4 由于致命的失实使备份操作停顿

diskcomp
0 盘相比相同
1 盘相比不同
2 用户通过ctrl-c中止相比较操作
3 由于致命的错误使相比较操作停顿
4 预置错误中止相比较

diskcopy
0 盘拷贝操作成功
1 非致命盘读/写错
2 用户通过ctrl-c截至拷贝操作
3 因致命的处理错误使盘拷贝中止
4 预置错误阻止拷贝操作

format
0 格式化成功
3 用户通过ctrl-c中止格式化处理
4 因致命的处理错误使格式化中止
5 在提示”proceed with format(y/n)?”下用户键入n截至

xcopy
0 成功拷贝文件
1 未找到拷贝文件
2 用户通过ctrl-c中止拷贝操作
4 预置错误阻止文件拷贝操作
5 拷贝过程中写盘错误

chkdsk
0 未找到错误
255 找到一个或三个错误

choice
0 用户按下ctrl+c/break
1 用户按下率先个键
255 检测到命令行中的错误条件
其他 用户按下的卓有功效字符在列表中的地点

defrag
0 零散压缩成功
1 出现其中错误
2 磁盘上尚无空簇。要运行DEFRAG,至少要有一个空簇
3 用户用Ctrl+C退出了DEFRAG
4 出现日常错误
5 DEFRAG在读簇时遇上错误
6 DEFRAG在写簇时碰着错误
7 分红空间有错
8 内存错
9 尚无充分空间来缩短磁盘碎片

deltree
0 成功地删除一个目录

diskcomp
0 两盘如出一辙
1 发现不同
2 按CTRL+C 终止了相比
3 出现严重错误
4 出现伊始化错误

find
0 查找成功且至少找到了一个郎才女貌的字符串
1 查找成功但没找到匹配的字符串
2 查找中冒出了不当

keyb
0 键盘定义文件装入成功
1 使用了地下的键盘代码,字符集或语法
2 键盘定义文件坏或未找到
4 键盘、监视器通讯时出错
5 要求的字符集未准备好

move
0 成功地活动了点名的文书
1 暴发了错误

msav /N
86 检查到了病毒

replace
0 REPLACE成功地更迭或加盟了文本
1 MS-DOS版本和REPLACE不兼容
2 REPLACE找不到源文件
3 REPLACE找不到源路径或目标路径
5 不可能存取要替换的文书
8 内存不够无法实施REPLACE
11 命令行句法错误

restore
0 RESTORE成功地光复了文本
1 RESTORE找不到要復苏的公文
3 用户按CTRL+C终止复苏过程
4 RESTORE因错误而停下

scandisk
0 ScanDisk在它检查的驱动器上未检测到其他错误
1 是因为命令行的语法不对,不可能运行ScanDisk
2 由于内存用尽或暴发内部错误,ScanDisk意外终止
3 用户让ScanDisk中途退出
4 举办盘面扫描时,用户决定提前退出
254 ScanDisk找到磁盘故障并已总体校正
255 ScanDisk找到磁盘故障,但无法全部校正

setver
0 SE电视ER成功地成功了职责
1 用户指定了一个失效的指令开关
2 用户指定了一个不法的文书名
3 没有充分的连串内存来运作命令
4 用户指定了一个不法的本子号格式
5 SE电视ER在版本表中未找到指定的项
6 SETVER未找到SETVER.EXE文件
7 用户指定了一个不法的驱动器
8 用户指定了太多的命令行参数
9 SE电视ER检测到丢失了命令行参数
10 在读SE电视ER.EXE文件时,SE电视ER检测到发生错误
11 SE电视机ER.EXE文件损坏
12 指定的SE电视机ER.EXE文件不协理版本表
13 版本表中绝非充分的空中存放新的项

14 在写SE电视ER.EXE文件时SE电视机ER检测到发出错误

3、IF STRING1 == STRING2

树立TEST5.BAT,文件内容如下:
@echo off
IF “%1” == “A” FORMAT A:

执行:
C:\>TEST5 A
屏幕上就应运而生是否将A:盘格式化的内容。

小心:为了以防万一参数为空的情况,一般会将字符串用双引号(或者其它符号,注意无法选取保留符号)括起来。
如:if [%1]==[A] 或者 if %1*==A*

5、GOTO

确立TEST6.BAT,文件内容如下:
@ECHO OFF
IF EXIST C:\AUTOEXEC.BAT GOTO _COPY
GOTO _DONE
:_COPY
COPY C:\AUTOEXEC.BAT D:\
:_DONE

注意:
(1) 标号前是ASCII字符的冒号”:”,冒号与标注之间无法有空格。
(2) 标号的命名规则与公事名的命名规则平等。
(3)
DOS援助最长八位字符的标注,当无法区分多少个标号时,将跳转至目前的一个标明。

==== willsort 编注

1)标号也称作标签(label)
2)标签不可以以绝大多数的非字母数字字符开端, 而文件名中则可以动用过多

3)当不可能区分六个标签时, 将跳转至地方最靠前的价签

6、FOR

建立C:\TEST7.BAT,文件内容如下:
@ECHO OFF
FOR %%C IN (*.BAT *.TXT *.SYS) DO TYPE %%C

运行:
C:\>TEST7

实践将来,屏幕上会将C:盘根目录下所有以BAT、TXT、SYS为增加名的公文内容显示出来(不包括隐藏文件)。

[technorati relative tag]

 

作品来源百度文库