FOR 深入

来源:互联网 发布:html5企业网站源码 编辑:程序博客网 时间:2024/06/05 01:55
在批处理程序中使用 FOR 命令时,指定变量请使用 %%variable
而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.

FOR %variable IN (set) DO command [command-parameters]

%variable 指定一个单一字母可替换的参数。
(set) 指定一个或一组文件。可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters 为特定命令指定参数或命令行开关。

通配符: * 代表任意个数热议字符,? 代表0或者1个任意字符

基础格式:

遍历输出集中的所有值,以空格或者逗号分隔

例子;
FOR %%V IN (aa 1 2 asd ad C:/) DO ECHO %%V

参数 /D :

FOR /D %variable IN (set) DO command [command-parameters]
如果集中包含通配符,则指定与指定的目录或者当前目录下的目录名匹配,而不与文件名匹配。

例子:
ECHO 当前目录
FOR /D %%V IN (*) DO ECHO %%V
ECHO ^*通配符
FOR /D %%V IN ( C:/***) DO ECHO %%V
ECHO ^?通配符
FOR /D %%V IN ( C:/????) DO ECHO %%V

参数 /R :

FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
检查以 [drive:]path 为根的目录树,指向每个目录中的 FOR 语句。
如果在 /R 后没有指定目录规范,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。

例子:
::这个可以有
FOR /R C:/ %%V IN ( .) DO ECHO %%V

set 中的文件名如果含有通配符(?或*),则列举/R 参数指定的目录及其下面的所用子目录中与 set 相符合的所有文件,无相符文件的目录则不列举。

例子:
FOR /R %%V IN (*.BAT) DO ECHO %%V

set 中的文件名为指定文件名则枚举该目录树,并将当前路径上追加该文件名构成一个完成路径

例子:
FOR /R %%V IN (Test.bat) DO ECHO %%V
输出中所有的路径都追加了该文件名构成一个完整的文件路径,但是不是每个路径都是正确的,所以通过判断是否存在找到正确路径
FOR /R %%V IN (Test.bat) DO IF EXIST %%V ECHO %%V

参数 /L :

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)

例子:
FOR /L %%V IN (1,1,5) DO ECHO %%V

参数 /F:

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,m-n - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。
如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。
usebackq - 指定新语法已在下类情况中使用:在作为命令执行一个后引号的字符串并且一个单引号字符为文字字符串命令并允许在 file-set 中使用双引号扩起文件名称。

例子:(网上以很详细教程的)
@echo off
rem 首先建立临时文件 test.txt
echo ;注释行,这是临时文件,用完删除 >test.txt
echo 11 段 12 段 13 段 14 段 15 段 16 段 >>test.txt
echo 21 段,22 段,23 段,24 段,25 段,26 段 >>test.txt
echo 31 段-32 段-33 段-34 段-35 段-36 段 >>test.txt
FOR /F "eol=; tokens=1,3* delims=,- " %%i in (test.txt) do echo %%i %%j %%k
Pause
Del test.txt
解释:
eol=; 分号开头的行为注释行,意思就是该符号开头的行忽略
tokens=1,3* 将每行第 1 段,第 3 段和剩余字段分别赋予变量%%i,%%j,%%k,可以表示多个段,IN 前面的变量默认为第一个段,所以段分配也从他开始,有多少段用多少变量
delims=,- (减号后有一空格)以逗号减号和空格为分隔符,空格必须放在最后。这个是所有段的分配标准,默认只有空格,通过他设定自定义的分隔符

例子:
@echo off
FOR /F "eol= delims=" %%i in (test.txt) do echo %%i
Pause
解释:将默认设置参数都取消掉,则无法区别注释和段分割,所以每行都全部显示

例子:
@echo off
FOR /F "delims=" %%i in ('net user') do @echo %%i
pause
解释:扩号内的内容用两个单引号引起来就表示那个当命令执行,FOR 会处理该命令返回的所有字符串
0 0
原创粉丝点击