for命令详解(一)【共十篇】
for命令详解(二)【共十篇】
for命令详解(三)【共十篇】
for命令详解(四)【共十篇】
for命令详解(五)【共十篇】
for命令详解(六)【共十篇】
for命令详解(七)【共十篇】
for命令详解(八)【共十篇】
for命令详解(九)【共十篇】
for命令详解(十)【共十篇】
【格式六】 
【file-set】
顾名思义,file-set 是个文件集合,如果file-set 中存在某个目录名,对应该目录,则提示“系统找不到”
示例
:: 本示例包含汉字,如执行乱码,请使用 Notepad++ 把本文档转化成ANSI编码 【标注一】
::demo.bat
@echo off
:: ziDir 是当前目录下的一个目录
for /f "" %%a in (ziDir) do (
echo a: begin-%%a-end
)
【标注一】 下载Notepad++
运行
C:\out>dir /b /a:d|findstr "ziDir$"
ziDirC:\out>demo
系统找不到文件 ziDir。
C:\out>
1、file-set 中的文件名不支持通配符
示例
::demo.bat
@echo off
for /f "tokens=1-2 delims= " %%a in (te?t.txt) do (
echo a: x%%ay
echo b: x%%by
)
运行
C:\out>where /r . text.txt
C:\out\text.txtC:\out>demo
系统找不到文件 te?t.txt。
C:\out>
2、file-set 是一个文件名列表,各个文件名之间使用空白分隔,每个文件名必须存在,不然,当循环至不存在的文件时,for命令会报错并退出
示例
::demo.bat
@echo off
for /f "tokens=1-2 delims= " %%a in (a.txt b.txt) do (
echo a: x%%ay
echo b: x%%by
)
运行
C:\out>type a.txt
11 22
C:\out>type b.txt
系统找不到指定的文件。C:\out>demo
a: x11y
b: x22y
系统找不到文件 b.txt。
C:\out>
3、file-set 中的文件名可以相对路径名,也可以是绝对路径名
示例
::demo.bat
@echo off
for /f "tokens=1-2 delims= " %%a in (a.txt c:\b.txt) do (
echo a: x%%ay
echo b: x%%by
echo ---------------------------
)
运行
C:\out>type c:\b.txt
xx yy zzC:\out>type a.txt
11 22
C:\out>demo
a: x11y
b: x22y
---------------------------
a: xxxy
b: xyyy
---------------------------
C:\out>
4、file-set 中的文件可以隐藏文件
示例
:: 本示例包含汉字,如执行乱码,请使用 Notepad++ 把本文档转化成ANSI编码 【标注一】
::demo.bat
@echo off
:: test.txt 是隐藏文件
for /f "tokens=1-3" %%a in (test.txt) do (
echo a: begin-%%a-end
echo b: begin-%%b-end
echo c: begin-%%c-end
echo ----------------------------------------------
)
运行
C:\out>dir /b /a:h test.txt
test.txtC:\out>type test.txt
one two three
;x y z
100 200 300C:\out>demo
a: begin-one-end
b: begin-two-end
c: begin-three-end
----------------------------------------------
a: begin-100-end
b: begin-200-end
c: begin-300-end
----------------------------------------------C:\out>
5、file-set 中的每文件名支持转义字符(^)
示例
::demo.bat
@echo off
for /f "tokens=1-2 delims= " %%a in (a.^txt) do (
echo a: x%%ay
echo b: x%%by
)
运行
C:\out>type a.txt
11 22
C:\out>demo
a: x11y
b: x22y
C:\out>
6、file-set 使用的分隔符总是空白(一个或多个空格),不受 delims=xxx 的影响
示例
::demo.bat
@echo off
for /f "tokens=1-2 delims=," %%a in (a.txt text.txt) do (
echo a: x%%ay
echo b: x%%by
echo -------------------------------------------------------
)
运行
C:\out>type a.txt
11 22
C:\out>type text.txt
one two
C:\out>demo
a: x11 22y
b: xy
-------------------------------------------------------
a: xone twoy
b: xy
-------------------------------------------------------
C:\out>
7、file-set 开头和末尾的空白(一个或多个空格)会被忽略
示例
::demo.bat
@echo off
for /f "tokens=1-2 delims= " %%a in ( a.txt text.txt ) do (
echo a: x%%ay
echo b: x%%by
echo -------------------------------------------------------
)
运行
C:\out>type text.txt
one two
C:\out>type a.txt
11 22
C:\out>demo
a: x11y
b: x22y
-------------------------------------------------------
a: xoney
b: xtwoy
-------------------------------------------------------
C:\out>
8、使用 file-set 时,如果被取的列中包含连续的多个空格,则这些空格会被原样输出,它们不会被合并为一个空格或被删除。
示例
::demo.bat
@echo off
for /f "tokens=1-2 delims=w" %%a in (text.txt) do (
echo a: x%%ay
echo b: x%%by
echo -------------------------------------------------------
)
运行
C:\out>type text.txtone two
C:\out>demo
a: x one ty
b: xo y
-------------------------------------------------------
C:\out>
【string】
1、string 是一个字符串列表(string 被for命令看作“一行”,所有只循环一次),多个字符串之间使用的分隔符由 delims=xxx 指定,多个连续的分隔符会被当作一个分隔符, string 开头和末尾的 xxx 会被忽略
示例
::demo.bat
@echo off
set /a num=0
for /f "tokens=1-3 delims=b" %%a in ("bbbbbbbbbbbbone two bbbbbbthreebbbbbbbbbbbbbbbbbbb") do (
set /a num+=1
echo %%a
echo %%b
echo %%c
)
echo %num%
运行
C:\out>demo
one two
three
ECHO 处于关闭状态。
1
C:\out>
2、string 不支持转义字符(^)
示例
::demo.bat
@echo off
set /a num=0
for /f "tokens=1-3 delims= " %%a in ("one t^wo") do (
set /a num+=1
echo %%a
echo %%b
echo %%c
)
echo %num%
运行
C:\out>demo
one
t^wo
ECHO 处于关闭状态。
1
C:\out>
3、使用 string 时,如果被取的列中包含连续的多个空格,则这些空格会被原样输出,它们不会被合并为一个空格或被删除。
示例
::demo.bat
@echo off
set /a num=0
for /f "tokens=1-3 delims=w" %%a in (" one two ") do (
set /a num+=1
echo a: x%%ay
echo b: x%%by
echo b: x%%cy
)
echo %num%
运行
C:\out>demo
a: x one ty
b: xo y
b: xy
1
C:\out>
【command】
1、使用 command 时,把执行 command 的输出内容看作一个文件,对该文件的每一行进行循环,行内分隔符由 delims=xxx 指定,多个连续的分隔符会被当作一个分隔符, 每行开头和末尾的 xxx 会被忽略
示例
::demo.bat
@echo off
set /a num=0
for /f "tokens=1-3 delims=w" %%a in ('echo wwwwwonewwwwtwowwwwww') do (
set /a num+=1
echo a: x%%ay
echo b: x%%by
echo b: x%%cy
)
echo %num%
运行
C:\out>demo
a: xoney
b: xty
b: xoy
1
C:\out>
2、使用 command 时,如果被取的列中包含连续的多个空格,有的 command(例如:echo)会导致连续空格被合并或被删除,有的 command(例如:type)则会原样输出连续空格,解决之道:使用转义字符(^)转义空格
示例
::demo.bat
@echo off
set /a num=0
for /f "tokens=1-3 delims=w" %%a in ('echo one two ') do (
set /a num+=1
echo a: x%%ay
echo b: x%%by
echo b: x%%cy
)
echo %num%set /a num=0
for /f "tokens=1-3 delims=w" %%a in ('echo ^ ^ ^ one^ ^ ^ ^ two^ ^ ^ ^ ^ ^ ^ ') do (
set /a num+=1
echo a: x%%ay
echo b: x%%by
echo b: x%%cy
)
echo %num%
运行
C:\out>demo
a: three
b:
c: %c
C:\out>demo
a: xone ty // “ one t” 开头的连续空格被删除,中间的连续空格被合并为一个空格
b: xo y
b: xy
1
a: x one ty
b: xo y
b: xy
1
C:\out>
3、和在DOS命令行下执行 command 一样,command 支持通配符。
示例
::demo.bat
@echo off
set /a num=0
for /f "tokens=1-3 delims=w" %%a in ('type d.t?t') do (
set /a num+=1
echo a: x%%ay
echo b: x%%by
echo b: x%%cy
)
echo %num%
运行
C:\out>type d.txtone two
C:\out>demod.txta: x one ty
b: xo y
b: xy
1
C:\out>
4、command 支持转义字符(^)
示例
::demo.bat
@echo offfor /f "tokens=1-2 delims= " %%a in ('echo thr^ee') do (
echo a: %%a
echo b: %%b
echo c: %%c
)
运行
C:\out>demo
a: three
b:
c: %c
C:\out>
5、命令分隔符(||、&&、&)和管道(|)用于 command 时,必须对其转义,不然会报错
示例
::demo.bat
@echo off
for /f "tokens=1 delims=" %%a in ('type test.txt^|findstr one') do (
echo a: x%%ay
)
echo -----------------------------------------------------------------------
for /f "tokens=1 delims=" %%a in ('echo=one^&^& echo two') do (
echo a: x%%ay
)
echo -----------------------------------------------------------------------
for /f "tokens=1 delims=" %%a in ('findstr xyz test.txt^|^| echo two') do (
echo a: x%%ay
)
echo -----------------------------------------------------------------------
for /f "tokens=1 delims=" %%a in ('echo one^& echo two') do (
echo a: x%%ay
)
运行
C:\out>type test.txt
oneC:\out>demo
a: xoney
-----------------------------------------------------------------------
a: xoney
a: xtwoy
-----------------------------------------------------------------------
a: xtwoy
-----------------------------------------------------------------------
a: xoney
a: xtwoyC:\out>
写作不易,本文档如能帮到您,麻烦您 “在下面一圈三连”。












