在进行测试的时候,我们希望测试磁盘的读写,于是想用一个简单的批处理来完成,批处理的copy功能是早就知道的,但怎么能让它多次执行,之前并没有用到过,于是想到for语句,或许for语句也能和在C语言中一样,进行多次循环。下面就将查找资料学到的知识总结如下:
在批处理文件中,for循环的使用格式如下:
for %%i in (command1) do command2
其使用要素如下所述:
1、for、in、do是for语句的关键字,缺一不可;
2、%%i是for语句中对形式变量的引用,就算它在do后面的语句中没有参与语句的执行,在这里也是必须出现的,类似于C语言中for循环的i,只不过在C语言中,for循环可以省去这个控制条件,直接写成for(;;)的死循环;
3、in之后,do之前的括号不能省略;
4、command1表示字符串或变量,command2表示字符串、变量或语句;
5、for后可以加/f、/r、/l、/d四个参数;
6、for语句的形式变量i可以换成26个字母中的任意一个,区分大小写;
7、in和do之间的command1表示的字符串或变量可以是一个,也可以是多个,每一个字符串或变量,我们称之为一个元素,每个元素之间,用空格键、跳格键、逗号、分号或等号分隔;
8、for语句依次提取command1中的每一个元素,把它的值赋予形式变量i,带到do后面的command2语句中参与命令的执行,当然,i也可以不参与命令的执行。当执行完一次do后面的语句后,再提取command1中的下一个元数据,再执行依次command2,如此循环,知道command1中的所有元素都已经被提取完毕,该for语句才宣告执行结束;
根据上述规则,本文开头所说的任务可以用下面的语句执行
for %%i in (a,b,c,d,e) do copy c:\test.doc d:\test.doc
上面的语句是将C盘下的test.doc拷贝的d盘下,且连续拷贝5次。
如果需要连续拷贝的次数很多,则采用上述方式写,command1会很长,程序会显得混乱,这时可以采用下面的方式:
set str = a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
for %%i in (%str%) do copy c:\test.doc d:test.doc
上述语句共执行了26次拷贝操作
上面的例子中,目的文件名都是相同的,这样下一次的复制会覆盖上一次复制的文件,如果不想覆盖,可以通过i来给文件名加个编号,如,写成如下形式
for %%i in (%str%) do copy c:\test.doc d:\test_%%i.doc
拷贝完之后目的文件名就变为test_a.doc、test_b.doc……,文件就不会被覆盖了。
现将完整过程表述如下:
1、首先新建一个记事本;
2、在记事本中输入下面的代码:
@echo off
set str = a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
echo 正在复制……
for %%i in (%str%) do copy c:\test.doc d:\test_%%i.doc
echo 复制完成
pause
3、将文件名的后缀改为.bat,双击即可运行。
注:需要注意的一个事情是,以上程序都是基于批处理文件而写的,如果在DOS命令下直接试用,需要将%%改为%。
参考资料
http://blog.csdn.net/wh_19910525/article/details/7912440