1、不添加任何参数,for循环显示非目录文件
for命令帮助信息是这样写的:
/**
FOR %variable IN (set) DO command [command-parameters]
%variable 指定一个单一字母可替换的参数。
(set) 指定一个或一组文件。可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters
为特定命令指定参数或命令行开关。
在批处理程序中使用 FOR 命令时,指定变量请使用 %%variable
而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.
*/
目录如下:
建立一文件 test.bat ,复制以下代码:
@echo off
for %%i in (C:\Users\Administrator\Desktop\test\*) do echo %%i
pause
双击运行结果:
可以明显的看到图中并没有显示目录
2、通过 /d 参数显示目录文件:
for命令帮助信息是这样写的:
/**
FOR /D %variable IN (set) DO command [command-parameters]
如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。
*/
复制以下代码:
@echo off
for /d %%i in (C:\Users\Administrator\Desktop\test\*) do echo %%i
pause
可以看到,加了参数 /d 后,只显示了目录文件
3、通过 /R 参数,显示目录的级
for命令帮助信息是这样写的:
/**
FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
检查以 [drive:]path 为根的目录树,指向每个目录中的 FOR 语句。
如果在 /R 后没有指定目录规范,则使用当前目录。如果集仅为一个单点(.)字符,
则枚举该目录树。
*/
我们在bbbbb目录下在创建ccc和ddd目录,在ccc目录里再穿件eee目录:
复制一下代码,栓剂运行:
@echo off
for /R C:\Users\Administrator\Desktop\test %%i in (.) do echo %%i
pause
运行结果:
可以看到命令行将目录的各级都显示出来了
4、fort通过参数 /L 来实现递增递减循环:
for命令帮助信息是这样写的:
/**
FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
检查以 [drive:]path 为根的目录树,指向每个目录中的 FOR 语句。
如果在 /R 后没有指定目录规范,则使用当前目录。如果集仅为一个单点(.)字符,
则枚举该目录树。
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)
*/
复制一下代码:
@echo off
for /L %%i in (1,1,4) do echo %%i
pause
运行结果:
如果改为: for /L %%i in (4,-1,2),则将以2为递减循环。
5、通过参数 /F 来对文件进行操作:
这里帮助信息太多,就不列出来了,建立一个文件,输入一下类容:
1234567890
aaaaaaaaaa
bb$bbbb*bb
cccccccccc
dddddddddd
eeeeeeeeee
ffffffffff
gggggggggg
格式如下:
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
其中“options”有这些:eol=c, skip=n, delims=xxx, tokens=x,y,x-n, usebackq
首先我们来看elo=c,他表示忽略以c开头的行,例如复制以下代码:
@echo off
for /f "eol=f" %%i in (C:\Users\Administrator\Desktop\test\hello.txt) do echo %%i
pause
执行结果:
可以看到fffffffffffff的那一行并没有被打印。
skip=n,表示跳过开头n行,例如复制以下代码:
@echo off
for /f "skip=2" %%i in (C:\Users\Administrator\Desktop\test\hello.txt) do echo %%i
pause
执行结果:
可以看到数字行和aaaaaaaaaaaaaaa行没有打印出来;
delims=xy,表示在每一行中以x为分隔符号,x和y后面的字符忽略,复制以下代码:
@echo off
for /f "delims=$" %%i in (C:\Users\Administrator\Desktop\test\hello.txt) do echo %%i
pause
执行结果:
对于tokens=n,m,n-m,参考:
http://blog.sina.com.cn/s/blog_4b795cc10100ez8d.html
对于usebackq,参见:
http://www.360doc.com/content/10/0706/05/1438974_37156664.shtml
6、对于set里面包含多条命令的方法
如下代码:
@echo off
for /f "delims=" %%i in ('dir /b .. ^| find "txt"') do echo %%i
pause
筛选某个目录下的txt文件,在管道前加 ^ 符号。
参见:http://bbs.csdn.net/topics/340021271
http://blog.csdn.net/lyhdream/article/details/14214657