注:这里介绍的是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 以下三字母比较操作符中的一个: 操作符 说明 /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”参数可以覆盖默认的解析行为。这是一个引用字符串,它包含一个或多个关键字以指定不同的解析选项。关键字是: 关键字 说明 变量替换 此外,已经增强了 for 变量引用的替换修改程序。现在可以使用下列可选的语法(对于任何变量 I): 变量(使用修改程序) 说明 修改程序可以合并以获得复杂的结果: 变量(使用合并的修改程序) 说明 例:要显示当前目录中扩展名为 .doc 或 .txt 的所有文件内容: 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。
结束批处理文件中环境更改的本地化,将环境变量还原为匹配 setlocal 命令前的值。 在批处理文件的结尾处有一个隐含的 endlocal 命令。 endlocal 如果启用了命令扩展(Windows 2000 中的默认设置),endlocal 命令将把命令扩展的启用/禁用状态还原到匹配的 setlocal 命令执行前的状态。
可替换参数 %0 和 %1 到 %9 可以放在批文件的任何位置。批处理文件运行时,%0 由批处理文件名替换,并且参数变量 %1 到 %9 由命令行上输入的相应参数替换。 % 参数扩展了批处理脚本参数变量 (%0, %1, ..., %9),如下所示: 批处理脚本中的 %* 是引用所有参数的通配符。对于单个参数变量,扩展选项如下表所述。 变量 描述 修改键可以组合使用以得到复合结果: 变量 描述 %~ 修改键可能无法 |