找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28377|回复: 8

[文件操作] for中能再套for吗?

[复制链接]
发表于 2016-8-27 21:21:07 | 显示全部楼层 |阅读模式
今天在试验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语句吗?
请达人解答。

评分

参与人数 1PB -2 收起 理由
pcl_test -2 发帖前先使用论坛搜索

查看全部评分

发表于 2016-8-27 21:50:42 | 显示全部楼层
 楼主| 发表于 2016-8-28 23:21:17 | 显示全部楼层
wtf! does minus go this often right here.
发表于 2016-8-29 10:54:54 | 显示全部楼层
回复 2# CrLf


    没看明白这个帖子跟楼主的问题有何联系,请详细指点一下吧。
发表于 2016-8-29 10:55:52 | 显示全部楼层
回复 3# lyonamstrong


建议多向版主请教一下搜索的技巧吧
我也很好奇到底搜索哪个关键字能解决这个问题呢
 楼主| 发表于 2016-8-29 11:11:27 | 显示全部楼层
回复 5# GNU


    好的,多谢指教
发表于 2016-8-29 12:51:20 | 显示全部楼层
回复 4# GNU


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

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

如果更精确一点,搜索标题关键词 “for 盘符”,你会发现更多
发表于 2016-8-29 19:21:34 | 显示全部楼层
回复 7# CrLf


这两个帖子只说了如果实现功能,没有介绍为何 for /r %%i %%j 或者 for /r !str! %%j 不行。
不知道版主是随意扣分还是确实有更好的搜索方法呢,拭目以待。
发表于 2016-8-30 08:50:23 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
GNU + 1 感谢详细讲解和分享

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 14:27 , Processed in 0.013134 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表