Windows批处理:命令for

一、基本用法

FOR %variable IN (set) DOcommand [command-parameters]
%variable 指定一个单一字母可替换的参数 。
(set) 指定一个或一组文件。可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters 为特定命令指定参数或命令行开关。
需要注意:
①、在批处理程序中使用 FOR 命令时,使用 %%variable;在命令行中,使用%variable。
②、变量variable 可以是26个字母中的任何一个,但是区分大小写的,A 与a会被认为是不同的变量。
③、IN和DO之间的set的括号不能省略,set表示字符串或者变量的集合,其中的元素可以用空格、tab键、逗号、分号和等号等分隔。
④、set可以使用通配符,比如*.*表示所有文件,*.bat表示所有.bat文件,???.bat表示3个字符文件名的文件
⑤、for语句依次提取set中的每一个元素,把它的值赋予形式变量variable ,然后执行do后的command 命令。

@echo off
for %%V in (This is,a;for=test) do echo %%Vs
pause

执行结果:

This
is
a
for
test
请按任意键继续. . .

二、计数循环

FOR /L %variable IN (start,step,end) DO command [command-parameters]
start 初始值;step 步进值;end 终止值
需要注意:
①、step步进值不能为零
②、step步进值为正数时,start初始值不能大于end终止值
③、step步进值为负数时,start初始值不能小于end终止值

@echo off
for /L %%v in (1,2,10) do echo 第%%v次
echo.
for /L %%v in (5,-3,-5) do echo 第%%v次
pause

执行结果:

第1次
第3次
第5次
第7次
第9次

第5次
第2次
第-1次
第-4次
请按任意键继续. . .

三、遍历第一层目录

FOR /D %variable IN (set) DO command [command-parameters]
需要注意:
若集合set中有通配符时,只会匹配文件夹,不会匹配文件。
若集合set中没有通配符时,FOR %variable IN (set) DO command [command-parameters]的用法是一致的。

@echo off
for /D %%d in (test) do echo %%d
echo ---分割---
for /D %%d in (test*) do echo %%d
pause

执行结果:

test
---分割---
testdir
请按任意键继续. . .

四、遍历目录树

FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
遍历path及其之下的所有子目录,对这些文件夹执行command的命令。
如果省略了path,默认为当前目录。
1、列举出当前目录及其子目录

@echo off
echo 当前目录 %CD%
for /r %CD% %%d in (.) do echo %%d
pause

执行结果:

当前目录 E:\Workspace\SourceCode\bat
E:\Workspace\SourceCode\bat\.
E:\Workspace\SourceCode\bat\help\.
E:\Workspace\SourceCode\bat\testdir\.

2、列举指定目录及其子目录中的指定后缀(如.bat)的文件(以.bat结尾的文件夹不会被列出)

@echo off
for /r %%d in (*.bat) do echo %%d
pause

执行结果:

E:\Workspace\SourceCode\bat\0help.bat
E:\Workspace\SourceCode\bat\1.bat
E:\Workspace\SourceCode\bat\10for.bat
E:\Workspace\SourceCode\bat\2.bat
E:\Workspace\SourceCode\bat\3.bat
E:\Workspace\SourceCode\bat\4echo.bat
E:\Workspace\SourceCode\bat\temp.bat
E:\Workspace\SourceCode\bat\testdir\temp.bat
请按任意键继续. . .

3、列举出指定目录及其所有的子目录,对所有目录路径后添加集合中的元素,然后执行command中的命令。

@echo off
echo 当前目录 %CD%
for /r %CD% %%d in (dir1 dir2) do echo %%d
pause

执行结果:

当前目录 E:\Workspace\SourceCode\bat
E:\Workspace\SourceCode\bat\dir1
E:\Workspace\SourceCode\bat\dir2
E:\Workspace\SourceCode\bat\help\dir1
E:\Workspace\SourceCode\bat\help\dir2
E:\Workspace\SourceCode\bat\test.bat\dir1
E:\Workspace\SourceCode\bat\test.bat\dir2
E:\Workspace\SourceCode\bat\testdir\dir1
E:\Workspace\SourceCode\bat\testdir\dir2
请按任意键继续. . .

五、文本解析

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]
或者,如果有 usebackq 选项:
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]
需要注意:
①、for /F 语句是以行为单位处理文件文件的
②、options主要有以下同个关键字:eol(忽略指定字符开关的行,默认字体为分号;)、
skip(忽略指定的行数,默认为0)、
delims(以指定的符号分割行成几节,默认为空格或tab)、
tokens(指定提取行分割成的元素)、
usebackq(为了兼容文件名中所带的空格或&)
③、options每个关键字之间需要加空格

先准备一个文本:

     	登黄鹤楼
昔人已乘黄鹤去,此地空余黄鹤楼。
黄鹤一去不复返,白云千载空悠悠。
晴川历历汉阳树,芳草萋萋鹦鹉洲。
日暮乡关何处是,烟波江上使人愁。

twinkle,twinkle,little star,
How I wonder what you are?
Up above the world so high,
Like a diamond in the sky.

:这是一个冒号号
;这是一个分号

1、使用默认值处理文本

@echo off
for /f %%r in (test.txt) do echo %%r
pause

执行结果:

登黄鹤楼
昔人已乘黄鹤去,此地空余黄鹤楼。
黄鹤一去不复返,白云千载空悠悠。
晴川历历汉阳树,芳草萋萋鹦鹉洲。
日暮乡关何处是,烟波江上使人愁。
twinkle,twinkle,little
How
Up
Like
:这是一个冒号号
请按任意键继续. . .

结果分析:每一行从非空格或tab的字符开始根据空格分割成1、2、3.。。。N节,如果没有空格,保持不变;
然后显示出第一行的第一节;处理行时会忽略分号;开关的行。
2、指定忽略以冒号开关

@echo off
for /f "eol=:" %%r in (test.txt) do echo %%r
pause

执行结果:

登黄鹤楼
昔人已乘黄鹤去,此地空余黄鹤楼。
黄鹤一去不复返,白云千载空悠悠。
晴川历历汉阳树,芳草萋萋鹦鹉洲。
日暮乡关何处是,烟波江上使人愁。
twinkle,twinkle,little
How
Up
Like
;这是一个分号
请按任意键继续. . .

3、指定以中文逗号分割每行

@echo off
for /f "eol=: delims=," %%r in (test.txt) do echo %%r
pause

执行结果:

        登黄鹤楼
昔人已乘黄鹤去
黄鹤一去不复返
晴川历历汉阳树
日暮乡关何处是
twinkle,twinkle,little star,
How I wonder what you are?
Up above the world so high,
Like a diamond in the sky.
;这是一个分号
请按任意键继续. . .

4、定点提取每行第二节元素

@echo off
for /f "eol=: delims=, tokens=2" %%r in (test.txt) do echo %%r
pause

执行结果:

此地空余黄鹤楼。
白云千载空悠悠。
芳草萋萋鹦鹉洲。
烟波江上使人愁。
请按任意键继续. . .

5、定点提取每行第1、3至5节元素
需要注意:tokens指定N节,command中需要有N个对应的变量;变量是从形式变量开始,向上递增的,如形式变量为%%r,那么其它对应的变量只能是%%s %%t %%u

@echo off
for /f "eol=: tokens=1,3-5" %%r in (test.txt) do echo %%r %%s %%t %%u
pause

执行结果:

登黄鹤楼
昔人已乘黄鹤去,此地空余黄鹤楼。
黄鹤一去不复返,白云千载空悠悠。
晴川历历汉阳树,芳草萋萋鹦鹉洲。
日暮乡关何处是,烟波江上使人愁。
twinkle,twinkle,little
How wonder what you
Up the world so
Like diamond in the
;这是一个分号
请按任意键继续. . .

6、每行根据中文逗号分割成两节

@echo off
for /f "eol=: delims=, tokens=1,*" %%r in (test.txt) do echo %%r %%s
pause

执行结果:

        登黄鹤楼
昔人已乘黄鹤去 此地空余黄鹤楼。
黄鹤一去不复返 白云千载空悠悠。
晴川历历汉阳树 芳草萋萋鹦鹉洲。
日暮乡关何处是 烟波江上使人愁。
twinkle,twinkle,little star,
How I wonder what you are?
Up above the world so high,
Like a diamond in the sky.
;这是一个分号
请按任意键继续. . .

结果分析 : 可以看到,诗中的中文逗号都不见了。这是因为每行根据中文逗号分割成两节,第二节赋给了*号。
7、以英文逗号分割成两节,跳过前6行

@echo off
for /f "delims=, skip=6 tokens=1,*" %%r in (test.txt) do echo %%r %%s

paus

执行结果:

twinkle twinkle,little star,
How I wonder what you are?
Up above the world so high
Like a diamond in the sky.
;这是一个分号
请按任意键继续. . .
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值