中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: for /r的嵌套问题? 上一主题 | 下一主题
tao0610
高级用户

朦胧的世界


积分 579
发帖 218
注册 2006-10-24
状态 离线
『楼 主』:  for /r的嵌套问题?

我想查找c,d,e,f盘下的存在不存在1.txt,2.txt,3.txt,4.txt,如果存在则显示路径

@echo off
set var=1.txt 2.txt 3.txt 4.txt
for %%i in (c d e f) do (
for /r %%i: %%a in (%var%) do (
  if exist %%a echo %%a
)
  )
pause >nul

到FOR /R 时说此时不应有%i,为什么这里不能调用%%i?
用CALL时就可以实现,FOR的嵌套具体是什么执行顺序?

2006-11-3 13:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
NaturalJ0
银牌会员




积分 1181
发帖 533
注册 2006-8-14
状态 离线
『第 2 楼』:  

同问,前几天写的时候也碰到这问题,后来用其它方法绕过去的,不知道正面应该如何解决。

2006-11-3 19:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
youxi01
高级用户




积分 846
发帖 247
注册 2006-10-27
来自 湖南==》广东
状态 离线
『第 3 楼』:  

这个应该是for语句的问题了,
这一句“ for /r %%i: %%a in (%var%) do ( ”根据for语句的格式,它就认为要将%%i传给后面的程序,但是这个%%i后面还跟着个" : "所以它就认为出错了!同下面的语句:for %i: %a in (*) do echo %a,可以测试下。

解决办法:
set var=1.txt 2.txt 3.txt 4.txt
for %%i in (c d e f) do (
cd /d %%i:
for /r . %%a in (%var%) do (
  if exist %%a echo %%a
)
)
pause >nul

2006-11-3 21:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 4 楼』:  

其实楼上的那个点可以不要
set var=1.txt 2.txt 3.txt 4.txt
for %%i in (c d e f) do (
%%i:
cd /d %%i:\
for /r %%a in (%var%) do (
  if exist %%a echo %%a
)
)
pause >nul



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-11-3 23:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tao0610
高级用户

朦胧的世界


积分 579
发帖 218
注册 2006-10-24
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by youxi01 at 2006-11-3 09:09 PM:
这个应该是for语句的问题了,
这一句“ for /r %%i: %%a in (%var%) do ( ”根据for语句的格式,它就认为要将%%i传给后面的程序,但是这个%%i后面还跟着个&qu ...

用for /r %%a in (%var%) do if exist %%a echo %%a
等于还是绕开了for /r后面要制定的根目录,而提前进入那个目录使它为默认目录
这个应该不是“:”的问题,下面这个代码就可以执行

@echo off
set a=d
set var=1.txt 2.txt
for /r %a%: %%i in (%var%) do @if exist %%i echo %%i
pause

应该可以调用变量,但是嵌套进FOR让%a做循环就会有问题
不知道为什么不能引用,还是嵌套多个for有特殊性?

2006-11-4 03:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
无奈何
荣誉版主





积分 1338
发帖 356
注册 2005-7-15
状态 离线
『第 6 楼』:  

RE tao0610
双层 for 循环下 for /r 确实有问题,不管是否启用延迟环境变量,也没有更多可以参考的资料,我偶尔也会感觉 CMD 有些东西莫名其妙。特别是多层循环或 if 嵌套的情况。
放到你的例子中单层循环可以解决,还有一个方法是 call 代码段跳到循环外面,可以解决很多问题。



  ☆开始\运行 (WIN+R)☆
%ComSpec% /cset,=何奈无── 。何奈可无是原,事奈无做人奈无&for,/l,%i,in,(22,-1,0)do,@call,set/p= %,:~%i,1%<nul&ping/n 1 127.1>nul

2006-11-4 04:54
查看资料  发送邮件  发短消息 网志  OICQ (105400208)  编辑帖子  回复  引用回复
tao0610
高级用户

朦胧的世界


积分 579
发帖 218
注册 2006-10-24
状态 离线
『第 7 楼』:  

for /r的多层循环确实有点莫明其妙,还是老老实实用CALL了!

2006-11-4 05:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: