批处理命令参数解释

批处理命令参数解释
2008年06月29日 星期日 10:46

注:这里介绍的是WIN2K下的批处理命令,与WIN9X稍有不同,主要区别在于对命令扩展的支持。

Call


从一个批处理程序调用另一个批处理程序,而不使父批处理程序停止。

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

call :label [arguments]

参数

[drive:][path] filename

指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。

batch-parameters

指定批处理程序所需要的任何命令行信息。有关对 batch-parameters 的扩展,请参阅下面 arguments 部分。

:label

指定要批处理程序控制跳转到的标签。使用带该参数的 call 命令可以创建新的批处理文件环境,并将控制传到指定标签后的声明。第一次到达批处理文件的末端时(在跳转到标签后),在 call 语句后控制返回说明。第二次遇到批处理文件的末尾,批脚本将被退出。

不要在 call 命令中使用管道和重定向符号。可以创建调用自身的批处理程序;但是,必须提供退出条件。否则,父和子批处理程序可以无限循环。

Goto

将 Windows 定向到由指定标签标记的批处理程序的行中。

goto label

参数

label

指定 Windows 应转到的批处理程序中的行。仅前八个字符有效,可以包括空格,但不能包含其他分隔符,如分号或等号。

使用 goto 命令和目标标签 :EOF 可以将控制转到当前批处理脚本文件的末尾,退出批处理文件但不定义标签。当使用 goto 和 :EOF 标签时,必须在标签前插入分号,例如:

goto :EOF

Echo

打开或关闭请求回显功能,或显示消息。

echo [on | off] [message]

参数

on | off

指定是否打开命令回显功能。要显示当前的回显设置,请使用不带参数的 echo 命令。

message

指定需要 Windows 在屏幕上显示的文本。

要回显屏幕上的空行,可以键入 echo 然后加一个句号 (echo. )。要显示管道 (|) 或重定向字符(< 或 >),请在管道 (|) 或重定向字符(例如,^>、^< 或 ^|)的前面使用脱字符。要使用一个脱字符本身 (^),请在一行中使用两个 (^^)。

If

在批处理程序中执行条件处理。如果 if 命令中指定的条件为真,Windows 将执行该条件后的命令。如果条件为假,Windows 将忽略 if 子句中的命令,并执行 else 子句中的任何命令(如果已经指定了命令)。

if [not] errorlevel number command [else expression]

if [not] string1==string2 command [else expression]

if [not] exist filename command [else expression]

启用了命令扩展:

if [/i] string1 compare-op string2 command [else expression]

if cmdextversion number command [else expression]

if defined variable command [else expression]

参数

not

指定只有当条件为假时 Windows 才能执行该命令。

errorlevel number

只有当前一个程序返回大于或等于 number 的退出代码时,才能指定真条件。

command

指定在符合前面的条件时 Windows 将执行的命令。

string1==string2

只有当 string1 和 string2 相同时才能指定真条件。这些值可以是文字字符串或批处理变量(例如,%1)。文字字符串不需要引号。

exist filename

如果 filename 存在,则指定真条件。

compare-op

以下三字母比较操作符中的一个:

操作符 说明
EQU 等于
NEQ 不等于
LSS 少于
LEQ 少于或等于
GTR 大于
GEQ 大于或等于

/i

指定 /i 开关时,将强制字符串比较按忽略大小写情况进行。/i 开关也可以用于 if 的 string1==string2 格式。这些比较是通用的,如果 string1 和 string2 都由所有的数字组成,那么字符串将被转换为数字并且将执行数字比较。

cmdextversion number

cmdextversion 条件的作用就像是 errorlevel,但它需要与 Cmd.exe 的“命令扩展”功能相关联的内部版本号比较。第一版是 1,当重大的增强添加到命令扩展中时,版本号将增加 1。当禁用命令扩展时,cmdextversion 条件不会为真。

defined variable

defined 条件的作用就象是 exist,但它使用环境变量名,并且如果环境变量已经定义它将返回真值。使用该条件添加三个变量:%errorlevel%, %cmdcmdline% 和 %cmdextversion%。

%errorlevel% 扩展到 errorlevel 当前值的字符串表达式,如果没有名为 ERRORLEVEL 的环境变量,在这种情况下可取代它的值。程序运行后,下面的图解 errorlevel 使用:

goto answer%erorlevel% :answer0 echo Program had return code 0 :answer1 echo Program had return code 1

也可以在 compare-op 中使用上面列出的比较操作符:

if %errorlevel% LEQ 1 goto okay

%cmdcmdline% 在任何 Cmd.exe 处理之前扩展传递到 Cmd.exe 的源命令行,如果没有名为 cmdcmdline 的环境变量,在这种情况下可取代它的值。

%cmdextversion% 扩展到 cmdextversion 当前值的字符串表达式,如果没有名为 CMDEXTVERSION 的环境变量,在这种情况下可取代它的值。

expression

在 else 子句中,expression 由 Windows 命令和任何传递到命令的参数组成。

Pause

暂停批处理程序的处理并显示消息,提示用户按任意键继续。

Rem

使您可以在批处理文件或配置文件中加入注释。

rem [comment]

参数

comment

指定要作为注释的任何字符串。不能使用重定向字符“<”或“>”或管道 (|)。

For

对一组文件中的每个文件运行指定的命令。

要在批处理程序中使用 for 命令,请使用以下语法:

for %%variable in (set) docommand [command-parameters]

要在命令提示符下使用 for,请使用以下语法:

for %variable in (set) do command [command-parameters]

参数

%%variable 或 %variable

代表可替换的参数。for 命令使用在 set 中指定的每个文本字符串替换 %%variable(或 %variable),直到此命令(在 command-parameters 中指定)处理所有的文件为止。使用 %% variable 在批处理程序中执行 for 命令。使用 % variable 通过命令提示符执行 for 命令。变量名区分大小写。

(set)

指定要用指定的命令处理的一个或多个文件或文本字符串。需要括号。

command

指定要在指定的 set 所包含的每个文件上执行的命令。

command-parameters

指定要用于指定命令(如果指定的命令要使用任何参数或开关)的任何参数或开关。

如果启用了命令扩展,将支持如下 for 命令的其他格式:

只限于目录

for /D [%% | %]variable in (set) docommand [command-parameters]

如果 set 包含通配符(* 和 ?),则指定与目录名匹配,而不是文件名。

递归

for /R [[drive :]path] [%% | %]variable in (set) docommand [command-parameters]

进入根目录树[drive:]path,在树的每个目录中执行 for 语句。如果在 /R 后没有指定目录,则假定为当前目录。如果 set 只是一个句号 (.) 字符,则只列举目录树。

迭代

for /L [%% | %]variable in (start,step,end) do command [command-parameters]

集合是一系列按步长量划分的、从头到尾的数字。这样,(1,1,5) 将生成序列 1 2 3 4 5,而 (5,-1,1) 将生成序列 (5 4 3 2 1)。

文件解析

for /F ["options"] [%% | %]variable in (filenameset) do command [command-parameters]

for /F ["options"] [%% | %]variable in ("literal string") do command[command-parameters]

for /F ["options"] [%% | %]variable in ('command') do command [command-parameters]

或者,如果出现 usebackq 选项:

for /F ["options"] [%% | %]variable in (filenameset) do command [command-parameters]

for /F ["options"] [%% | %]variable in ('literal string') do command [command-parameters]

for /F ["options"] [%% | %]variable in (`command`) docommand [command-parameters]

filenameset 参数指定一个或多个文件名称。在继续到 filenameset 中的下一个文件之前,每个文件都会被打开、读取和处理。

过程由读取文件、分成独立的文本行及然后将每行解析成零个或更多个令牌组成。然后使用设置为找到的一个或多个令牌字符串的变量值(或多个值)集合调用 for 循环体。默认情况下,/F 传递每个文件每一行的第一个空白分隔符号。

跳过空行。通过指定可选的“options”参数可以覆盖默认的解析行为。这是一个引用字符串,它包含一个或多个关键字以指定不同的解析选项。关键字是:

关键字 说明
eol=c 指定行尾注释字符(只一个字符)
skip=n 指定在文件的开头跳过的行数。
delims=xxx 指定定界符集合。这将替换空格和制表符的默认分隔符集。
tokens=x,y,m-n 指定将令牌从每行传递到每个反复的正文。这将导致分配其他变量名。m-n 格式是一个范围,指定从 mth 到 nth 的令牌。如果在令牌 = 字符串中最后一个字符是星号,则将分配附加的变量,并在解析最后一个令牌后在行上接收剩余的文本。
usebackq 指定将右引号字符串作为命令执行,单引号字符串是文字字符串命令,您可以使用双引号包括 filenameset 中的文件名。

变量替换

此外,已经增强了 for 变量引用的替换修改程序。现在可以使用下列可选的语法(对于任何变量 I):

变量(使用修改程序) 说明
%~I 展开删除了周围的任何引号 (") 的 %I
%~fI 将 %I 展开到完全合格的路径名
%~dI 只将 %I 展开到驱动器号
%~pI 只将 %I 展开到路径
%~nI 只将 %I 展开到文件名
%~xI 只将 %I 展开到文件扩展名
%~sI 展开路径以只包含短名称
%~aI 将 %I 展开到文件的文件属性
%~tI 将 %I 展开到文件的日期/时间
%~zI 将 %I 展开到文件大小
%~$PATH:I 搜索 PATH 环境变量所列出的目录,并将 %I 展开开到第一个找到结果的全部合格名称。如果没有定义环境变量名,或搜索后没有找到文件,则此修改程序将扩展为空字符串。

修改程序可以合并以获得复杂的结果:

变量(使用合并的修改程序) 说明
%~dpI 只将 %I 展开到驱动器号和路径
%~nxI 只将 %I 展开到文件名和扩展名
%~fsI 将 %I 展开到只包含短名称的完整路径名
%~dp$PATH:I 在 PATH 环境变量所列出的目录中搜索 %I,并展开到第一个找到结果的驱动器号和路径
%~ftzaI 将 %I 扩展到与 dir 相似的输出行

例:要显示当前目录中扩展名为 .doc 或 .txt 的所有文件内容:
for %f in (*.doc *.txt) do type %f

Shift

更改批处理文件中可替换参数的位置。

shift

启用命令扩展(Windows 2000 中的默认设置)后,shift 命令支持 /n 开关,该开关通知命令在第 n 个参数处开始更改,n 可以是从 0 到 8 的任何一个值。例如, SHIFT /2 将 %3 改为 %2,将 %4 改为 %3 等等,而 %0 和 %1 保持不变。

该命令的好处是使批处理文件可以接受 10 个以上参数,但要注意其操作是不可逆的。

Setlocal

开始批处理文件中环境变量的本地化。本地化将持续到出现匹配的 endlocal 命令或者到达批处理文件结尾为止

setlocal option

参数

option

启用命令扩展(Windows 2000 中的默认设置)后,setlocal 批处理命令将接受可选参数,可以是 enableextensions 或 disableextensions。这将启用或禁用命令扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。

传递给 setlocal 命令参数时,setlocal 命令还设置 errorlevel 值。如果给定两个有效的参数之一,则 errorlevel 值设置为 0,否则设置为 1。


Endlocal

结束批处理文件中环境更改的本地化,将环境变量还原为匹配 setlocal 命令前的值。

在批处理文件的结尾处有一个隐含的 endlocal 命令。

endlocal

如果启用了命令扩展(Windows 2000 中的默认设置),endlocal 命令将把命令扩展的启用/禁用状态还原到匹配的 setlocal 命令执行前的状态。


%(可替换参数)

可替换参数 %0 和 %1 到 %9 可以放在批文件的任何位置。批处理文件运行时,%0 由批处理文件名替换,并且参数变量 %1 到 %9 由命令行上输入的相应参数替换。

% 参数扩展了批处理脚本参数变量 (%0, %1, ..., %9),如下所示:

批处理脚本中的 %* 是引用所有参数的通配符。对于单个参数变量,扩展选项如下表所述。

变量 描述
%~1 扩展 %1 并删除所有引号 (")
%~f1 将 %1 扩展到完全合格的路径名
%~d1 将 %1 扩展到驱动器盘符
%~p1 将 %1 扩展到路径
%~n1 将 %1 扩展到文件名
%~x1 将 %1 扩展到文件扩展名
%~s1 扩展的路径仅包含短名称
%~a1 将 %1 扩展到文件属性
%~t1 将 %1 扩展到文件日期/时间
%~z1 将 %1 扩展到文件大小
%~$PATH:1 搜索 PATH 环境变量中列出的目录,并将 %1 扩展到发现的第一个目录的完全合格的名称。如果没有定义环境变量名称,或搜索没有找到文件,则此修改键扩展成空字符串。

修改键可以组合使用以得到复合结果:

变量 描述
%~dp1 将 %1 扩展到驱动器盘符和路径
%~nx1 将 %1 扩展到文件名和扩展名
%~dp$PATH:1 在 PATH 环境变量列出的目录中搜索 %1,并扩展到发现的第一个目录的驱动器盘符和路径
%~ftza1 将 %1 扩展到类似 dir 的输出行

%~ 修改键可能无法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值