中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]判断文件夹并遍历文件夹的内容
作者:
标题: [已结]判断文件夹并遍历文件夹的内容 上一主题 | 下一主题
qinqong
高级用户




积分 599
发帖 148
注册 2003-10-30
状态 离线
『楼 主』:  [已结]判断文件夹并遍历文件夹的内容

我想判断给的的路径是文件还是文件夹,若是文件夹,就找出它里面的所有文件和子文件夹下的文件(只需要获得文件名就行),请高手帮忙?

[ Last edited by willsort on 2006-7-22 at 19:33 ]

2006-7-18 23:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
poyexinghun
新手上路

吃->学->睡


积分 12
发帖 4
注册 2006-7-16
来自 襄阳城边看风景!
状态 离线
『第 2 楼』:  

这是我刚才才写的,不知道是不是你表达的意思,如不是请谅解!
如果合意,看看有什么不足,帮忙改一下,共同学习!

set input=                                           echo 初始化变量为空
set /p input=                                       echo 需要用户输入文件夹名
if %input% =='' exit                             echo 如果用户输入为空则退出
dir /b/s %input% >c.txt                        echo 查找文件夹的完整路径写入文件
for /f %%i in (c.txt) do dir %%i >c.txt    echo 将查看子目录的信息写入到文件
more c.txt                                           echo 浏览文件信息即子目录信息
del c.txt                                              echo 删除文件
pause                                                  echo 退出

[ Last edited by poyexinghun on 2006-7-19 at 04:13 ]

2006-7-19 03:41
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (94157508)  编辑帖子  回复  引用回复
qinqong
高级用户




积分 599
发帖 148
注册 2003-10-30
状态 离线
『第 3 楼』:  

谢谢了,我很长时间没用DOS了,手有点生了。

2006-7-19 10:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 4 楼』:  

  2楼的并不能解决问题,并且echo及其之后的内容是错误的注释格式。

  以下代码在XP下测试通过。
@echo off
if exist list.txt del list.txt /q
:input
cls
set input=:
set /p input=           请输入要进行判断的路径:
set "input=%input:"=%"
:: 上面这句为判断%input%中是否存在引号,有则剔除。
if "%input%"==":" goto input
if not exist "%input%" goto input
for %%i in ("%input%") do if /i "%%~di"==%%i goto input
pushd %cd%
cd /d "%input%">nul 2>nul || exit
set cur_dir=%cd%
popd
for /f "delims=" %%i in ('dir /b /a-d /s "%input%"') do echo %%~nxi>>list.txt
if not exist list.txt goto no_file
start list.txt
exit

:no_file
cls
echo       %cur_dir% 文件夹下没有单独的文件
pause
[ Last edited by namejm on 2006-7-20 at 11:04 ]

2006-7-19 13:09
查看资料  发短消息 网志   编辑帖子  回复  引用回复
poyexinghun
新手上路

吃->学->睡


积分 12
发帖 4
注册 2006-7-16
来自 襄阳城边看风景!
状态 离线
『第 5 楼』:  

谢谢!
小弟初学,不知道规范,以后还请各位多多指教!

运行了兄的代码,提点见意!(讨论学习吗?)
兄的代码可行性比较好,就是灵活性不是很好。
例:
   e:\downloads\miusc\mp3
如果只输入mp3就能查到文件夹的所有信息不是更好?
不知兄认为如何?



The knowledge changes destiny!  
2006-7-19 13:39
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (94157508)  编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 6 楼』:  

Re poyexinghun:

  呵呵,4楼的代码只是应楼主的要求而写,能满足楼主的需要就够了,我不能画蛇添足地来一些楼主没提到的功能啊。

  如果想查找文件夹的一些信息,也不是不能办到,不过有些可能做不到。如果你想要的话,请说明你想显示文件夹的什么信息,看CMD或者我能不能办到:)

  代码的规范问题,初学的时候都会犯一些错误,以前我也好不到哪里去,多写一些就顺手了。呵呵,共同进步吧。

2006-7-19 13:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


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

Re namejm:

      不错的代码!不过再提几点个人意见。

      1、根据程序的结构看,&& goto list 和 :list 标签是可以省略的。

      2、根路径可以不用设置,因为已经是当前路径了。

      3、获取目录名可以联合使用 /r /d ,它不会列出指定的根路径;或者使用%%~fi,这样就不用使用 set 来截去路径中的\.了。

      这一点楼主的描述有问题,让人无法确定是想获得文件还是文件夹的名字,我认为前者的可能性大些,也就是说“文件夹”是“文件名”的讹误。

Re poyexinghun:

      只要当前路径是e:\downloads\miusc,那么输入mp3后,namejm熊的代码是可以获得mp3下所有子文件夹信息的。



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-7-19 14:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 8 楼』:  

Re willsort:

  1、&& goto list 和 :list 确实可以省略,当初只是按思路把想到的都写出来,没考虑到代码的精简;

  2、当初写这段代码的时候,想到应该把它放到任意位置都可以对指定的文件夹进行操作,而不仅仅对bat所在的文件夹进行操作,所以,我觉得对根路径还是要进行判断,以免错误地输入了根路径;

  3、发现用dir来操作更容易一点,于是放弃了for语句,不再考虑是否要截取\.的问题了;

  改动后的代码能生成绝对路径和相对路径,可任意选择适合的结果。

2006-7-19 19:37
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 9 楼』:  

  呵呵,当时看得潦草,现在再认真看了一下楼主的描述,原来是要找文件夹下的所有文件(包括子文件夹下的)而不是文件夹,我理解反了:(
  要实现这个目的的话,把dir /ad改成dir /a-d就可以了,但是楼主只要文件名就够了,不需要相对路径,这个得再想个法子,可能还是不能用dir而用for中的%~fi了,我再想想。

[ Last edited by namejm on 2006-7-20 at 10:43 ]

2006-7-20 10:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 10 楼』:  

  稍作改动,应该符合楼主的要求了。

2006-7-20 11:03
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qinqong
高级用户




积分 599
发帖 148
注册 2003-10-30
状态 离线
『第 11 楼』:  

问题已解决,多谢兄弟们了

2006-7-21 12:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
jubailan
新手上路





积分 14
发帖 6
注册 2007-6-18
状态 离线
『第 12 楼』:  

4 楼  的不错阿,学到了挺多东西

2007-6-18 22:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: