1、for /f %%i in (文件名) do (……)
2、for /f %%i in ('命令语句') do (……)
3、for /f %%i in ("字符串") do (……)
4、for /f "usebackq" %%i in ("文件名") do (……)
5、for /f "usebackq" %%i in (`命令语句`) do (……)
6、for /f "usebackq" %%i in ('字符串') do (……)
其中,4、5、6由1、2、3发展而来,他们有这样的对应关系:1-->4、2-->5、3-->6。
好在后3种情形并不常用【 编注:其实这三种情况经常会碰到,windows的文件路径通常带空格的比较多】,所以,牢牢掌握好前三种句型【 编注:最好记住后三种,因为我经常用到的都是后3种】的适用情形就可以了,否则,要在这么多句型中确定选择哪一条语句来使用,还真有点让人头脑发懵。至于 for /f 为什么要增加usebacq参数,我只为第4条语句找到了合理的解释:为了兼容文件名中所带的空格或&。它在第5、6条语句中为什么还有存在的必要,我也不是很明白,这有待于各位去慢慢发现【编注:第五条的其实也有存在的必要,详细见下面<3.5>的解释】。
<3.5> 解释说明:请你在命令提示符下面运行dir /a-d /b /s *.exe ,其作用是打印出该文件夹下面所有的exe文件,包括子目录里面的。下面的test目录是我自己创建的。
D:\Program Files\腾讯游戏>dir /a-d /b /s *.exe
D:\Program Files\腾讯游戏\test\abc.exe
D:\Program Files\腾讯游戏\test\aaa.exe
D:\Program Files\腾讯游戏\CFSelWorld.exe
D:\Program Files\腾讯游戏\crossfire.exe
D:\Program Files\腾讯游戏\limingliming.exe
由上面的命令执行结果,可以看出,第5条语句里面的"usebackq"完全有存在的必要。微软搞出这么个东西来,自然也有它的用处的。举个例子c.bat内容如下:
cd /d "D:\Program Files\腾讯游戏"
for /f "usebackq delims=" %%i in (`dir /a-d /b /s *.exe`) do cacls "%%i" /e /c /d everyone
(1) for /f "usebackq delims=" %%i in ("d:\a.txt") do echo "%%i" 注:对a.txt按照每行进行切割,然后循环打印
"abc\def\xyz"
"xxxxxx"
"yyyyy"
"123\456\ddd"
(2) for /f "usebackq delims=\" %%i in ("d:\a.txt") do echo "%%i" 注:对a.txt按照在反斜杠'\'处进行切割,切割出来的结果只取第一个反斜杠的前面的内容,如果某行一个反斜杠则全打印出来。
"abc"
"xxxxxx"
"yyyyy"
"123"
(3) for /f "usebackq tokens=2, delims=\" %%i in ("d:\a.txt") do echo "%%i" 注: 如果想取某个地方的,比如想截取def,请使用tokens,详细用法见网页链接《 for循环详细用法,请参考此文章。》
其中a.txt有如下内容:
abc\def\xyz
xxxxxx
yyyyy
123\456\ddd