用户名: 密码: 忘记密码? 注册

批处理命令参数解释(Win2K)

作者:  时间: 2010-12-28

批处理命令参数解释(Win2K)

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

Call
从一个批处理程序调用另一个批处理程序(父程序等待返回)。

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

call :label [arguments]

参数:

[drive:][path] filename
目标批处理程序全路径。注意,不能省略 .bat 或 .cmd 扩展名。

batch-parameters
传递给目标批处理的参数。有关对 batch-parameters 的扩展,请参阅下面 arguments 部分。

:label
本批处理程序内部标签。内部标签调用的效果与单独的批处理文件一样——父程序等待返回——何时返回?运行到eof。

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


Goto
跳转到指定标签处运行。

用法:
goto label

参数:

label
批处理标签。长度限8,即仅前8个字符有效,可以包括空格,但不能包含其他分隔符,如分号或等号。

特殊标签 :EOF 表示当前批处理脚本文件的末尾,goto此标签将退出批处理文件。当使用 goto 和 :EOF 标签时,需要分号,即
goto :EOF


Echo
回显,即显示信息。不带message的echo表示开关回显。

用法:
echo [on | off] [message]

参数:

on | off
回显开关。不带参数的 echo 命令表示查看当前回显开关。

message
待显示信息。

提示:
echo后加句号 (echo. ) 表示回显空行。当变量%msg%可能为空时可以如下使用
echo. %msg%
要显示特殊字符 如管道|、重定向字符(< 或 >等),请在前面使用脱字符^。要显示脱字符本身(^)也一样
echo ^^


If
条件语句。

用法:
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
取反。

errorlevel number
只有当前一个程序返回值(退出代码)大于或等于(>=) number 时,判断为真。

command
if判断为真时执行的命令(语句块用括号括起来)。

string1==string2
串比较,串可以是字符串字面量或批处理变量(例如 %1)。
提示:引号不是必须的,但建议加上。

exist filename
判断文件是否存在。存在为真,否则为假。

compare-op
比较操作符。

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

/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 命令和任何传递到命令的参数组成。
提示:
和前面提到的command部分一样,如果是语句块要用括号括起来。并且注意括号前的空格和位置——左括号要和if/else同行。


Pause
暂停批处理程序的处理并显示消息“按任意键继续”

Rem
批处理程序注释。

用法:
rem [comment]

参数:

comment
注释。注意,其中不能使用重定向字符“<”或“>”或管道 (|)。

for[见单独一节]

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

用法:
shift

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


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

用法:
setlocal option

参数:

option

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

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

Endlocal
结束批处理文件中环境更改的本地化,将环境变量还原为匹配 setlocal 命令前的值。
在批处理文件的结尾处有一个隐含的 endlocal 命令。


%(可替换参数)
可替换参数 %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 的输出行

%~ 修改键可能无法与 %* 一同使用。