

第4课 for命令讲解
1.For命令的语法及CMD窗口和批处理中的写法区别,批处理下变量要有两个百分号,如:
CMD窗口中:for #I in (command1) do command2
批处理中:for %%I in (commmand1) do command2
语法要点:
a.for语句有in和do两个关键字,三个缺一不可
b.%%I在for语句中也必须要有,它是for语句对形式变量的引用,就算它在do后的语句中不参与执行
c.in之后,do之前的的括号不能省略,command1的括号不能少
d.command1表字符串或变量,command2表字符串,变量或命令语句
2.例子1
@echo off
for %%I in (bbs,jksing,com) do echo %%I //这里command1是字符串
pause>nul 屏蔽掉"按任意键继续"这句话,nul表空
a.这里的形式变量I可以换成26个字母的中任意一个,区别大小写,即%%I和%%i是两个变量,但不能换成数字,否则会和批处理中有0%-9%这个10形式变量冲突
b.in和to间的command1可以表示一个或多个字符串或变量,每个字符串和变量表一个元素,元素间用空格,跳格,逗号,分号或等隔开.
c.for语句是依次提取command1中的每个元素,把它赋给形式变量I,然后带到do后的command2中参与命令的执行,无论元素是否被带到command2中参与执行,都是每次只提取一个元素,执行一次do后的命令,如此循环,直到command1中的所有元素被提取完.
3.for命令的参数
/F 分块提取文件
/D 显示当前目录下所有指定目录名称
/R 枚举文件和目录
/L 计次循环
子参数: tokens(块), delims(分块标志), eol(忽略行),skip(跳过行), userbackq(支持长路径名)
4.例子2
@echo off
for /f "tokens=1 delims= " %%a in (text.txt) do (
//要从text.txt文件中以空格为分块标志提取每行中的第一块,/f参数表要分块提取, 子参数tokens=1表第1块, delims表以什么为分块的标志,in从什么里面,do然后做什么
echo %%a
)
pause>nul
5.例子3
@echo off
for /f "tokens=1,2,3 delims= " %%a in (text.txt) do (
//要从text.txt文件中以空格为分块标志提取每行中的第1块和第2块
echo %%a %%b %%C
)
pause>nul
5.例子4
@echo off
for /f "tokens=1-3 delims= " %%a in (text.txt) do (
//要从text.txt文件中以空格为分块标志提取每行中的第1块和第2块
echo %%a %%b %%C
)
pause>nul
6.例子5
@echo off
for /f "eol=! tokens=*" %%a in (test.txt) do (
//要从test.txt文件中提取所有块并忽略以!号开头的行
echo %%a
)
pause>nul
7.例子6
for /f "skip=3 tokens=*" %%a in (test.txt) do (
//从test.txt文件中提取所有块并跳过前三行
8.例子
@echo off
for /d %%a in (pro*,doc*) do (
echo %%a
)
pause>nul
//显示以pro和doc开头的目录
9,例子
@echo off
for /r %systemroot% %%a in (*.tmp) do (
//,/r枚举文件或目录,显示系统目录以tmp为后缀的所有文件
echo %%a >>ok.txt 保存为ok.txt文件
)
pause>nul
10./l,计次循环的例子
@echo off
set i=0
for /l %%a in (1,1,100) do (
//,/l表计次循环 起始值,步值即每次加多少,最大值
set /a i+=1 //,/a是set的一个参数,用了运算符,这里+=,i+=1即i=i+1
echo %%a //显示运算结果
)
pause>nul
11.长路径名例子,如cd program files 或cd progra~1
@echo off
for /f "usebackq" %%a in ("C:\Program Files\jksing.txt") do (
//,/f分块提取文件,这里使用是program files长文件名所以要加个usebackq参数,不然后面的长路径不能识别
echo %%a
)
pause>nul
12.for的变量扩展
@echo off
for /r %%i in (*.txt) do (
echo %%~fi %%~si 该扩展是带上长路径名,后面是扩展短路径名
)
pause>nul