文档库 最新最全的文档下载
当前位置:文档库 › 实用批处理命令

实用批处理命令

C.5 灵活使用批处理文件的参数
大多数命令行实用程序需要额外的信息,如文件名(例如,当使用COPY或DEL命令时)或文件路径(例如当使用CD或MD命令)。这些附加的信息称为参数—— 提供了指定命令工作方式的灵活性。还可以向批处理文件添加相同级别的灵活性。要理解其工作原理,首先查看以下示例:

@ECHO OFF

ECHO.

ECHO The first parameter is %1

ECHO The second parameter is %2

ECHO The third parameter is %3

可以看到,该批处理文件只是通过ECHO命令在屏幕上回显4行内容(第一行只是空白行)。但是,可以发现每个ECHO命令都是以百分号符号(%)和数字结束。输入并保存该批处理文件为PARAMETERS.BAT。然后,为了查看这些不寻常符号的含义,可以在Windows Vista的“命令提示符”中输入以下命令:

parameters Tinkers Evers Chance

产生的输出如下:

C:\>parameters Tinkers Evers Chance

The first parameter is Tinkers

The second parameter is Evers

The third parameter is Chance

在PARAMETERS.BAT中接下来的ECHO命令将产生第一行的输出(在空白行后):

ECHO The first parameter is %1

当Windows Vista在批处理文件中遇到%1符号时,它会检查原始命令并查找批处理文件名后的第一个词,然后用这个词替换%1。在本例中,parameters后的第一个词是Tinkers,所以Windows Vista将使用它替换%1(这就是批处理文件编程人员称%1为可替换参数(replaceable parameter)的原因)。仅当完成该操作后才能在屏幕上执行ECHO命令行。

可替换参数%2的情况也类似,只是在这种情况下,Windows Vista会查找批处理文件名后的第二个词(如本例中的Evers)。

注意:

如果批处理文件命令的参数超过批处理文件查找的参数,则它会忽略多余的参数。例如,向parameters命令行添加第四个参数将不会对文件操作有任何影响。注意,批处理文件中的可替换参数不能多于9个(从%1到%9),然而存在第10个可替换参数(%0),它用于保存批处理文件本身的名称。

提示:

如果可替换参数是含有一个或多个空格的字符串,则应该使用引号包含该参数。

现在介绍一个现实生活中的例子,考虑下面这个实用且灵活的批处理文件NEWFOLDER.BAT:

@ECHO OFF

CLS

MD \batch

CD \batch

该批处理文件会在当前文件夹下创建名为batch的新文件夹,然后进入该文件夹中。您可能会惊讶地发现您经常需要这样操作,所以尝试自动执行整个过程很有意义。

遗憾的是,这并非最好的运行方式。每次要创建和进入文件夹时都需要设置批处理文件,但是您不应该浪费时间在该操作上,而是可以使用替换参数向NEWFOLDER.BAT添加灵活性:

@ECHO OFF

CLS

MD %1

CD %1

现在,如果想创建和进入新的

批处理文件夹,可以输入以下命令:

newfolder \batch

Vista会将NEWFOLDER.BAT中的每个%1替换成\batch(newfolder后面的第一个词),因此批处理文件仍像以前一样运行。当然这里的区别在于,还可以将其用于其他文件夹。例如,为了创建名为scripts的新文件夹并进入该文件夹,可以使用如下命令:

newfolder \scripts

注意:

如果在“运行”对话框中运行NEWFOLDER.BAT批处理文件,Vista会在保存批处理文件的文件夹中创建新文件夹。

改进命令行实用程序
因为批处理文件的可替换参数可以像命令行实用程序中的参数那样使用,所以不难创建批处理文件用于模仿甚至改进标准的“命令提示符”。

1. 使DEL命令更安全
当使用通配符删除多个文件时,大概会有99.9%的概率会发生命令行删除意外。在错误的位置使用问号标记或在错误的文件夹中使用*.*将导致灾难。

注意:

符号*和?都是通配符。可以使用?匹配单个字符,也可以使用*匹配任意长度的字符。

如果能看到将要删除的文件列表,然后在出现问题时也有取消删除的选项,则会很有帮助。当然,最简单的方式是通过DEL所使用的相同文件说明来运行DIR命令。但是每次输入两个命令并确保?s和*s是否处于正确的位置是件很麻烦的事情。这里可以使用批处理文件,如下(SAFEDEL.BAT)所示:

@ECHO OFF

CLS

ECHO %0 %1

ECHO.

ECHO Here is a list of the files that will be deleted:

REM Display a wide DIR list in alphabetical order

DIR %1 /ON /W

ECHO.

ECHO To cancel the deletion, press Ctrl+C. Otherwise,

PAUSE

DEL %1

可以像DEL命令那样使用SAFEDEL.BAT。例如,为了在当前文件夹中删除所有的.bak文件,则可以输入以下命令:

safedel *.bak

以下列表是操作的概要:

● 命令ECHO %0 %1简单地显示了批处理文件名(%0)和用于引用的文件说明(%1)。

● DIR %1 /ON /W命令用于显示按字母顺序排列的将要删除的文件列表(采用宽格式,这样可以看到更多的文件)。

● 然后批处理文件运行PAUSE命令,这样就可以检查文件。

● 如果确定继续(按任意键),DEL %1命令将开始执行。

注意:

百分号(%)是在文件名中非常有用的字符,但是如果试图引用已命名的文件,例如PERCNT%.XLS,则会导致问题。因为当“命令提示符”处理批处理文件时,它会盲目删除任何单独出现作为替换参数一部分的%符号,因此PERCNT%.XLS将变成PERCNT.XLS,从而导致问题。为修复这个问题,当在批处理命令中引用文件时,应使用双百分号(如PERCNT%%.XLS)。

2. 使用一个步骤更改文件夹和驱动器
如果需要更改当前目录到其他驱动器的文件夹上,则可以使用CD命令。先更改到驱动器,然后

运行CD命令。使用CDD.BAT可以在一条命令中完成该功能:

@ECHO OFF

%1:

CD \%2

例如,要进入驱动器G的BACKUP文件夹,只要简单地使用如下命令:

cdd g backup

如果不想输入反斜杠符号,则可以通过添加一些额外的CD命令避免输入:

@ECHO OFF

%1:

CD \%2

CD %3

CD %4

现在,为了进入驱动器G的\BACKUP\123\DATA文件夹,则可以输入以下命令:

cdd g backup 123 data

3. 从Copy命令中排除文件
通配符用于在单条命令中包括多个文件。但是,如何排除某些文件?例如,在WP\DOCS文件夹中有各种不同扩展名(如.doc、.txt和.wp等)的文件。如果想复制除扩展名为.txt的所有文件到驱动器A,应如何操作?一种解决方案是:为每个需要的扩展名使用单独的XCOPY命令,但工作量很大(而且可能还会遗漏某种扩展名)。应该使用以下批处理文件代替(名为DONTCOPY.BAT):

@ECHO OFF

CLS

ATTRIB +H %1

ECHO.

ECHO Copying all files to %2 except %1:

ECHO.

XCOPY *.* %2

ATTRIB -H %1

为了使用该批处理文件将当前文件夹中的除扩展名为.txt外的所有文件复制到驱动器G,可以使用以下命令:

dontcopy *.txt g:

这里的秘密是DOS不会复制隐藏文件,因此DONTCOPY.BAT使用ATTRIB命令隐藏要忽略的文件。第一个命令ATTRIB +H %1就是用于实现隐藏。现在只需使用XCOPY命令复制所有非隐藏文件(使用*.*)到目标文件夹(%2)。当完成复制后,DONTCOPY.BAT使用另一个ATTRIB命令取消隐藏文件。

注意:

处于安全的考虑,DONTCOPY.BAT应当检查并确保输入了目标参数(%2)。这需要通过本附录后面将要介绍的批处理文件命令IF和GOTO来完成。

注意:

可以用同样的思路使用其他命令排除文件。例如,“命令提示符”不会删除或重命名隐藏文件,因此不难创建合适的DONTDEL.BAT和DONTREN.BAT批处理文件。







C.6 SHIFT:使用参数的另一种方法
尽管要到本附录后面才使用,但应该知道在批处理文件中还存在另一种处理参数的方式:SHIFT命令。为了了解其工作方式,重写PARAMETERS.BAT文件得到PARAMETERS2.BAT:

@ECHO OFF

ECHO.

ECHO The first parameter is %1

SHIFT

ECHO The second parameter is %1

SHIFT

ECHO The third parameter is %1

如果输入命令parameters2 Tinkers Evers Chance,将得到和以前一样的输出:

C:\BATCH>parameters2 Tinkers Evers Chance

The first parameter is Tinkers

The second parameter is Evers

The third parameter is Chance

其工作原理是:每个SHIFT命令会将参数向下移动一个位置。特别地,%2将移动到%1,因此以下命令实际上显示了第二个参数:

ECHO The second parameter is %1

当然,其他参数也一样改变:%3移动到%2,%1移动到%0,%0将被删除掉。

这种行为可以很容易地

处理以下两种情况:

● 要求超过10个参数的批处理文件—— 不会有太多的时候需要很多参数,但至少知道在需要更多参数时可以这样处理。

● 使用不同数量参数的批处理文件—— 这是一种更为常见的情况,稍后将看到一些示例。

注意,这里不急于介绍SHIFT示例,因为要适当地使用SHIFT命令,需要IF命令测试是否还有更多参数需要移动,这将在本附录后面的IF命令中介绍(请参见“IF:处理批处理文件的条件”)。

相关文档
相关文档 最新文档