batch file(1) -- for statement
本文最后更新于:Thursday, December 3rd 2020, 8:46 am
1 official explanation
type
for /?in your cmd.exe prompt

2 common usage1
跟python里面迭代器发「iterator」很像,对一个集合的数据做相同的操作。
note:
- 如果是在命令行,那么使用
%G;在脚本文件中使用%%G- 如果迭代器每次产生一个值,那正好赋值为%%G
- 如果迭代器每次产生多个值,那么系统隐式定义几个变量来保存值,默认是按字母顺序:
%%H%%I%%J…- 如果迭代器产生文件,可以使用扩展符来提取文件名称/路径/日期/大小等
1 for
1FOR %%parameter IN (set) DO command
- 把一系列文件拷贝到备份
1 | |
2 for /R
1FOR /R [[drive:]path] %%parameter IN (set) DO command
如果省略[[drive:]path] 那么用当前的代替
set必须使用通配符
?和.如果(set)为(.), 那么便利每个文件夹,不遍历文件test
列出从C:\temp\开始的每个子文件夹中的每个.bak文件
1
For /R C:\temp\ %%G IN (*.bak) do Echo "%%G"将’demo’文件夹和所有子文件夹中的.LOG文件重命名为.TXT:
1
For /R C:\demo\ %%G in (*.LOG) do Echo REN "%%G" "%%~nG.TXT"依次将目录更改为当前文件夹下的每个子文件夹(包含自己所在文件夹)2
1
2
3
4
5FOR /R %%G in (.) DO (
Pushd %%G
Echo now in %%G
Popd )
Echo "back home"

3 for /D
1FOR /D [/r] %%parameter IN (folder_set) DO command在几个目录/文件夹上有条件地执行一个命令。
/r 递归的进入子文件夹
列出名称以“Users”开头的文件夹C:\Work\下面的每个子文件夹
1
2
3@Echo Off
CD \Work
FOR /D /r %%G in ("User*") DO Echo We found %%~nxG4 for /L
1FOR /L %%parameter IN (start,step,end) DO command有条件地对一组数字执行命令。
从1数到5
1
FOR /L %%G IN (1,1,5) DO echo %%G非数值列表可以使用标准的for命令
1
FOR %%G IN (Sun Mon Tue Wed Thur Fri Sat) DO echo %%G给文件创建1000个副本
1
FOR /l %%G in (1,1,1000) DO copy SourceFile.txt NewFile%%G.txt5 for /F
1
2
3FOR /F ["options"] %%parameter IN (filenameset) DO command
FOR /F ["options"] %%parameter IN ("Text string to process") DO command针对文件里面的字符处理
options:(优先级:usebackq > skip > delims > eol > tokens)
delims=xxx(分隔符, 默认为空格)
skip=n (文件开头要跳过的一些行,默认为0)
eol=; (每行开头指示注释的字符,默认为分号;)
tokens=n (指定要从每行读取哪些编号的项,默认为1)
usebackq (使用交替引用的风格)
- 如果”delims=”,那么把一行都视为第一个token
- “eol=&” 一般把eol设置为不容易碰到的字符,避免把本该解释的行注释掉
- “skip=3” 去掉前面三个空行
- tokens用法:
2,4,6,2-6(2到6),*(所有),3*(第4个起后面的)
复制文本文件中列出的文件到新的目的地:
1
2假设files.txt每行包含一个文件名
FOR /f "delims=" %%G in (files.txt) DO copy "\\source\folder\%%G" "H:\destination\%%G"从包含字符和逗号的文本文件中提取数据
文件如下:
January,Snowy,02
February,Rainy,15
March,Sunny,251
FOR /F "tokens=1,3 delims=," %%G IN (weather.txt) DO @echo %%G %%H结果如下:
January 02
February 15
March 25解析一段字符串
1
FOR /F "tokens=4 delims=," %%G IN ("deposit,$4500,123.4,12-AUG-09") DO @echo Date paid %%G输出:Date paid 12-AUG-09
6 for /F
1FOR /F ["options"] %%parameter IN ('command to process') DO command命令解析:对命令的处理包括每次读取一行命令的输出,然后将该行分解为单个的数据项或“tokens”。然后执行DO命令,并将参数设置为找到的tokens。
使用场景:你想执行一些命令,把命令指令的结果提取出来并赋予变量,然后对该变量进行一系列操作
只打印环境变量,不打印其值
1
FOR /F "delims==" %G IN ('SET') DO @Echo %G把Windows版本设置为环境变量
1
FOR /F "tokens=4*" %%G IN ('ver') DO SET _version=%%G输出结果:
SET _version=10.0.19042.630]
(其中命令env输出:Microsoft Windows [Version 10.0.19042.630])
列出一个文件夹中的所有文本文件,包括完整路径
1
FOR /F "tokens=*" %%G IN ('dir/b /s ^"c:\program files\*.txt^"') DO echo %%G
References
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!
