[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 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语句吗?
请达人解答。
1

评分人数

    • pcl_test: 发帖前先使用论坛搜索PB -2

本帖最后由 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
1

评分人数

    • GNU: 感谢详细讲解和分享技术 + 1

TOP

回复 7# CrLf


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

TOP

回复 4# GNU


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

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

如果更精确一点,搜索标题关键词 “for 盘符”,你会发现更多

TOP

回复 5# GNU


    好的,多谢指教

TOP

回复 3# lyonamstrong


建议多向版主请教一下搜索的技巧吧
我也很好奇到底搜索哪个关键字能解决这个问题呢

TOP

回复 2# CrLf


    没看明白这个帖子跟楼主的问题有何联系,请详细指点一下吧。

TOP

wtf! does minus go this often right here.

TOP

TOP

返回列表