中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 请问这里的FOR有什么不同呢? 上一主题 | 下一主题
xiaojun
银牌会员





积分 2202
发帖 499
注册 2003-6-12
状态 离线
『楼 主』:  请问这里的FOR有什么不同呢?

如果我把 for %%a in (c,d,e) do if exist %%a:\*.txt dir /s  %%a:\*.txt 里的*.txt换成*.gho,就只查根目录的gho文件,而如果TxT或com或exe,它会连子目录的文件都找出来,为什么这样呢? 谢谢...



一年四季,枫叶红了又红;人生四季,失去的,还能再来吗?—— !
2004-2-3 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 2 楼』:  

Re xiaojun:

    主要是因为的你的循环语句的循环体中使用了if exist %%a:\*.txt,即只在当前盘的根存在对应文件时,才搜索其子目录,我估计你的测试中,测试的盘根有.TXT,.COM,.EXE文件,却没有镜象文件。



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2004-2-3 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xiaojun
银牌会员





积分 2202
发帖 499
注册 2003-6-12
状态 离线
『第 3 楼』:  

的确如此,替换if exist成dir /s 后,便是连子目录都找了,原来如此.多谢...!
不过,如果需要让它连子目录都找,不用dir或者外部命令,用if exist或其它来完成,该怎么写来变通呢?



一年四季,枫叶红了又红;人生四季,失去的,还能再来吗?—— !
2004-2-3 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 4 楼』:  

Re xiaojun:

    你的意思是指如何实现DOS目录的遍历吗?这在批处理实现上有很大难度,而且大多数情况都可以用其他思路来灵活变通。可以说出你的具体要实现的目标吗?



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2004-2-3 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xiaojun
银牌会员





积分 2202
发帖 499
注册 2003-6-12
状态 离线
『第 5 楼』:  

是的,我只希望在不借外部命令的情况下,找到一个文件便执行之,刚学批处理,不知道如何遍历1个盘符下的子目录...谢谢



一年四季,枫叶红了又红;人生四季,失去的,还能再来吗?—— !
2004-2-3 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 6 楼』:  

Re xiaojun:

    一个不借用外部命令实现的目录遍历?有点开玩笑吧。

    先给你一个利用递归算法实现的目录遍历,仅为示意性代码:

    ::visitdir.bat
    if [%1]==[] call %0 \.

    :main
    cd %1
    if exist 指定文件 指定操作
    dir /ad /b > dirlist.txt
    :subloop
    dir dirlist.txt | find "   0" > nul
    if not errorlevel 1 goto end
    type nul > null.txt
    fc dirlist.txt null.txt /n | find "1:" > setdir.bat
    echo e 100 "set dir=">setdir.asd
    echo w>>setdir.asd
    echo q>>setdir.asd
    debug setdir.bat  nul
    call setdir
    call %0 %1\%dir%
    find "%dir%"  dirlist2.txt
    copy dirlist2.txt dirlist.txt > nul
    goto subloop
    :end

    以上程序使用外部命令 fc, find, debug或其他串操作工具.


[此贴子已经被作者于2004-2-5 18:04:01编辑过]






※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2004-2-5 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xiaojun
银牌会员





积分 2202
发帖 499
注册 2003-6-12
状态 离线
『第 7 楼』:  

谢谢您,以上已收集下来学习 ; 没有玩笑,刚学,不懂而已 ; 既然一定要用到外部命令,那我只好选择Locate,能少10排代码还多...再次多谢 !


[此贴子已经被作者于2004-2-5 21:26:48编辑过]






一年四季,枫叶红了又红;人生四季,失去的,还能再来吗?—— !
2004-2-5 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 8 楼』:  

Re xiaojun:

    外部命令也有外部命令的区别的。因为fc,find这些外部命令属于大多数系统的自带程序,不需要你的程序专门提供,也就是说移植性很强。而你说的Locate我就没有,需要随同你写的调用代码一同对外发布;而就大小而言,我相信Locate肯定比我写的这个程序要大些。

     另外,那个递归算法的程序很有些问题,花时间写了个非递归的,已经测试通过,你可以看看。
http://model.chinajewelry.net/dos/dosbbs/dispbbs.asp?boardID=6&ID=9588



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2004-3-13 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: