批处理中for语句的简单使用

在进行测试的时候,我们希望测试磁盘的读写,于是想用一个简单的批处理来完成,批处理的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

时间: 2024-08-04 13:06:08

批处理中for语句的简单使用的相关文章

批处理中set截取字符详解

set截取字符详解  在批处理中,set的功能有点繁杂:设置变量.显示环境变量的名及值.做算术运算.等待用户的输入.字符串截取.替换字符串,是我们常用的命令之一. 在字符串截取方面,新手因为没能注意到偏移量的问题,很容易提取到错误的字符串,因此,特开此帖,详细解释 set 截取字符的用法. 我们先来看一个例子: set str=123456789 现在,我需要提取变量 str 中的第一个字符,那么,该怎么写命令呢? set var=%str:~1,1%?我想,这很可能是很多粗懂set用法的新手们

批处理中set截取字符具体解释

set截取字符具体解释  在批处理中,set的功能有点繁杂:设置变量.显示环境变量的名及值.做算术运算.等待用户的输入.字符串截取.替换字符串,是我们经常使用的命令之中的一个. 在字符串截取方面,新手由于没能注意到偏移量的问题,非常easy提取到错误的字符串,因此,特开此帖,详解 set 截取字符的使用方法. 我们先来看一个样例: set str=123456789 如今,我须要提取变量 str 中的第一个字符,那么,该怎么写命令呢? set var=%str:~1,1%?我想,这非常可能是非常

批处理中Copy与Xcopy命令的区别(转自:www.jbxue.com)

有关批处理脚本中,copy命令与xcopy命令在用法上的一些区别.原文地址:http://www.jbxue.com/article/14536.html Copy与Xcopy的区别一,copy不能在有子目录存在的文件中拷贝文件的同时重命名此文件名说明,这里C:为根目录,bat为子目录),而xcopy能,不过会出现提示,当然可以加参数而不使它提示. C:\>copy c:\bat\hai.bat d:\bat\hello.bat提示:系统找不到指定的路径. 已复制 0 个文件.可以这样: C:\

批处理中setlocal enabledelayedexpansion的作用详细整理

转自:https://www.jb51.net/article/29323.htm 设置本地为延迟扩展.其实也就是:延迟变量,全称延迟环境变量扩展, 想进阶,变量延迟是必过的一关!所以这一部分希望你能认真看. 为了更好的说明问题,我们先引入一个例子.例1: @echo off set a=4 set a=5&echo %a% pause 结果:4解说:为什么是4而不是5呢?在echo之前明明已经把变量a的值改成5了?让我们先了解一下批处理运行命令的机制:批处理读取命令时是按行读取的(另外例如fo

[转]批处理中

本文来自:http://www.jb51.net/article/105325.htm regsvr32 "%~dp0phCache.dll" 在一个批处理中看到以上语句,并且同目录下有 Cache.dll 这个文件,所以百度了一下,得到上面网址中的信息. 摘要: 我们来重申下 %~dp0 和 %cd% 的区别, %cd% 和 %~dp0 都能用来表示当前目录,但是他们在不同的使用场景下,功能却不相同: %cd% 代表的是当前工作目录(current working directory

批处理中for循环多个%

实例:@echo offset NUM=10000for /f %%i in (字符.txt) do (set JSZF=%%ifor /L %%. in (0,1,%NUM%) do ( Call echo %%JSZF:~%%.,1%% >>1.txt)pause)解析: for /L %%var in (start#, step#, end#) do (command1)对将start#的值赋予%%var,判断%%var是否小于等于end#,如果是则执行command1中的命令,并把st

linux 在批处理中,完整路径有空格的处理方式(加引號)

cp -f E:/XML_EDITOR/xmleditor25/xmleditor/Editor_UIOuterCtrl/TraceViewDlg.cpp E:/XML_EDITOR/'XMLEditor windows server 2008'/xmleditor/Editor_UIOuterCtrl/TraceViewDlg.cpp cp -f E:/XML_EDITOR/xmleditor25/xmleditor/Editor_UIOuterCtrl/TraceViewDlg.h E:/X

cmd批处理中set /a和set /p的区别介绍

在 SET 命令中添加了两个新命令行开关: SET /A expression SET /P variable=[promptString]/p 是让你输入/a 是指定一个变量等于一串运算字符 什么参数也没有是让一个变量等于一串普通字符] @echo off set /p b=输入一个数字:echo %b%set /a a=2*%b%echo %b%+%b%=%a%pause>nul

批处理中ERRORLEVEL的用法

当最后一个程序运行,其返回的退出码大于或等于指定的数值,则条件成立. 第三方命令rec用于返回用户指定的退出码,如:rec 365,表示rec命令结束时返回的退出码是365. if ERRORLEVEL 365 echo okayrec 365if ERRORLEVEL 365 echo okay echo %ERRORLEVEL%rec 365echo %ERRORLEVEL% %ERRORLEVEL%默认值为0,无效命令时值为9009. 原文地址:https://www.cnblogs.co