批命令SHIFT的妙用 1995-07-28 如下是一个用于删除多个文件的批文件mydcl.bat: @echo off echo 这是一个用于删除多个文件参数的批处理文件 echo 使用方法:mydel [D:][PATH]FILENAME1[D:][PATH]FILENAME2... :work if "%1"=="" goto enddel %1 shift goto work :end 现在根目录上有三个文件aa、bb、cc,用mydel.bat来删除: c:\>mydel aa bb cc 实际上,mydel.bat是一个循环语句。它首先遇到if语句,检查%1(aa)是否为空,dos将del %1替换成del aa,接着执行goto work语句;第二次循环,if语句测试BB非空,shift把%1参数更替成bb,执行del bb,goto work;第三次循环,shift把%1参数更替成cc,执行del cc;最后,shift把%1更替成空,if检测到参数为空,goto end语句,批文件结束。 利用shift这一特性来建立一个用于拷贝多项参数的批文件mycopy.bat: @echo off echo 这是一个可拷贝多项参数的批文件 echo 使用方法:mycopy directory[D:][PATH]file1[D:][PATH]file2 set workdir=%1 :work shift if "%1"=="" goto end copy %1 workdir% goto work :end 现在有三个文件aa、bb、cc欲拷贝到tmp目录: c:\>mycopy tmp aa bb cc 由于要拷贝多个文件参数,为了区别被拷贝的文件群与目标目录,dos把目标目录tmp放在前面,而把要拷贝的文件放在后面。这点与我们平常使用的方法略有不同。观察执行过程:它是这样执行的:copy aa tmp,这点与我们的使用还是一致的。然后shift把%1先后更替为bb、cc,copy bb tmp和copy cc tmp,最后if语句测试到%1为空并执行goto end语句,批文件结束。 如上所述,我们还可以利用shift这一特性来建立mydir.bat,以“dir %1”代替mydel.bat文件中的“del %1”,用来列表显示多项文件目录参数,也可建立mymove.bat文件,以“move %1 %workdir%"代替mycopy.bat文件中的“copy %1 %workdir%”,用于移动文件等多项批文件。此类批文件允许使用通配符。 (邹大刚)