Board logo

标题: [文件操作] for中能再套for吗? [打印本页]

作者: lyonamstrong    时间: 2016-8-27 21:21     标题: for中能再套for吗?

今天在试验for do的用法时,多试了一步。
比如在e:\下的某个子目录中有一个a.txt文本文件,然后现在通过for在c:\ d:\ e:\下查找。
正确方式是:
for %a in (c: d: e do cd /d %a & for /r %b in (a.txt) do if exist %b echo %b.
这一句的逻辑有点复杂。然后我尝试写成这样:
for %a in (c: d: e:) do (for /r %a %b in (a.txt) do if exist %b echo %b)
为啥这样会报错呢?是do后面不能再套for语句吗?
请达人解答。
作者: CrLf    时间: 2016-8-27 21:50

http://www.bathome.net/viewthread.php?tid=12500
作者: lyonamstrong    时间: 2016-8-28 23:21

wtf! does minus go this often right here.
作者: GNU    时间: 2016-8-29 10:54

回复 2# CrLf


    没看明白这个帖子跟楼主的问题有何联系,请详细指点一下吧。
作者: GNU    时间: 2016-8-29 10:55

回复 3# lyonamstrong


建议多向版主请教一下搜索的技巧吧
我也很好奇到底搜索哪个关键字能解决这个问题呢
作者: lyonamstrong    时间: 2016-8-29 11:11

回复 5# GNU


    好的,多谢指教
作者: CrLf    时间: 2016-8-29 12:51

回复 4# GNU


其实是凭印象搜的,主要说明 for 的参数特性,不过确实没有明确提及顶楼问题相关的内容,因为参与那个帖子的都知道这些坑啦,只是讨论这些坑是怎么形成的

搜索关键词:“for 参数”,找到以下两个帖子
http://www.bathome.net/viewthread.php?tid=12175
http://www.bathome.net/viewthread.php?tid=22317

如果更精确一点,搜索标题关键词 “for 盘符”,你会发现更多
作者: GNU    时间: 2016-8-29 19:21

回复 7# CrLf


这两个帖子只说了如果实现功能,没有介绍为何 for /r %%i %%j 或者 for /r !str! %%j 不行。
不知道版主是随意扣分还是确实有更好的搜索方法呢,拭目以待。
作者: WHY    时间: 2016-8-30 08:50

本帖最后由 WHY 于 2016-8-30 08:53 编辑

个人觉得从变量展开的优先级别来考虑可能会便于理解一些

1.
for /r %%a %%b in (a.txt?) do echo %%b
%%a %%b 属于同一级别的变量,即便预处理后也不符合 for 语法规则,报错是肯定的

2.开启变量延迟扩展后
for /r !str! %%b in (a.txt?) do echo %%b
!str! 比 %%b 优先级别更低,预处理并不会展开!str!,同样不符合 for 语法规则而报错

3.如果是 %1 或 %var% 形式的变量
for /r %var% %%b in (a.txt?) do echo %%b
预处理时 %1 或 %var% 已经展开,像这样:for /r c: %b in (a.txt?) do echo %b
当然就不报错了。

可以参考这个帖子:http://www.bathome.net/thread-6537-1-1.html




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2