![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-04 11:08 |
共 48,038 主题排行 / 350,123 发帖 / 今日 0 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » dir /a-d /b /s 查找分区根目录及其所有子目录时的一个bug |
| 可打印版本 2,329 / 11 |
| 第1楼 namejm | 发表于 2007-03-09 04:24 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
dir /a-d /b /s 查找分区根目录及其所有子目录时的一个bug 假设:我想把E盘下所有存在test.txt这个文本文件的完整路径列出来,我使用了如下代码:
如果E盘根目录下正好有一个名为test.txt的文件夹,这下就热闹了:E:\test.txt下有多少个文件,E:\test.txt这个路径就会显示多少次!如果E:\test.txt下没有文件,E:\test.txt这条路径就不会有任何显示。如果test.txt这个文件夹存在于E盘的某个子文件夹中,就不会出现这样的情形。 稍加分析,发现原因是这样的:test.txt 这个名字存在二义性:它既可以表示名为 test 的文本文件,也可以表示名为 test.txt 的文件夹;而全分区查找指定文件的 dir 命令,必须写成 dir /a-d /s e:\test.txt 的格式,这样一来,因为 test.txt 的二义性,就导致了 dir 会搜索 e:\test.txt 这个文件夹下所有类型的文件、同时,也搜索 E: 分区下的所有名为 test 的文本文件。 解决的办法是:对dir后的结果进行检验。代码可以修改为: [ Last edited by namejm on 2007-3-8 at 03:52 PM ] |
|
| 第2楼 ccwan | 发表于 2007-03-09 05:09 |
| 金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊 | |
|
呵呵,我跟着版主的思路来一段代码吧,这个代码的思路是先提取所有的txt,然后再检验文件名,而jm的代码是先提取所有的test.txt及E:\test.txt下的所有文件(包括子目录里的),然后,再检验文件名
如果txt文件的数量巨大的话,jm的代码会要快一点 |
|
| 第3楼 xycoordinate | 发表于 2007-03-09 23:20 |
| 中级用户 发帖 228 积分 493 来自 安徽 | |
|
如果有几个test.txt文件,
想找某个日期的, 怎么办? |
|
| 第4楼 shuaigeya | 发表于 2007-03-10 07:42 |
| 初级用户 发帖 19 积分 42 | |
|
学习了 我这个菜鸟从中受到一些启发 斑竹就是牛B
|
|
| 第5楼 shuaigeya | 发表于 2007-03-10 07:46 |
| 初级用户 发帖 19 积分 42 | |
|
if /i "%%~nxi"=="test.txt" 这一句我不明白是什么意思 结果我把这句去掉 也
可以用 呵呵 @echo off for /f "delims=" %%i in ('dir /a-d /b /s 'dir /a-d /b /s e:\test.txt') do ( echo "%%~dpi" ) |
|
| 第6楼 xycoordinate | 发表于 2007-03-11 01:06 |
| 中级用户 发帖 228 积分 493 来自 安徽 | |
Originally posted by shuaigeya at 2007-3-9 18:46: for /? 另外,FOR 变量参照的替换已被增强。您现在可以使用下列 选项语法: ~I - 删除任何引号("),扩充 %I %~fI - 将 %I 扩充到一个完全合格的路径名 %~dI - 仅将 %I 扩充到一个驱动器号 %~pI - 仅将 %I 扩充到一个路径 %~nI - 仅将 %I 扩充到一个文件名 %~xI - 仅将 %I 扩充到一个文件扩展名 %~sI - 扩充的路径只含有短名 %~aI - 将 %I 扩充到文件的文件属性 %~tI - 将 %I 扩充到文件的日期/时间 %~zI - 将 %I 扩充到文件的大小 %~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩充 到找到的第一个完全合格的名称。如果环境变量名 未被定义,或者没有找到文件,此组合键会扩充到 空字符串 可以组合修饰符来得到多重结果: %~dpI - 仅将 %I 扩充到一个驱动器号和路径 %~nxI - 仅将 %I 扩充到一个文件名和扩展名 %~fsI - 仅将 %I 扩充到一个带有短名的完整路径名 %~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充 到找到的第一个驱动器号和路径。 %~ftzaI - 将 %I 扩充到类似输出线路的 DIR |
|
| 第7楼 huzixuan | 发表于 2007-03-11 01:26 |
| 高级用户 发帖 219 积分 537 来自 芜湖 | |
|
果然是这样!
if /i "%%~nxi"=="test.txt" echo "%%~dpnxi" 用的巧,用的好阿! @echo off for /f "delims=" %%i in ('dir /a-d /b /s e:\test.txt') do ( if /i "%%~nxi"=="test.txt" echo "%%~dpnxi" ) pause |
|
| 第8楼 hxmupdata | 发表于 2007-03-14 22:08 |
| 初级用户 发帖 39 积分 76 | |
|
看完了,有点清楚了,6楼的xycoordinate
给的说明真是好啊,省了自己去查了....... |
|
| 第9楼 wudixin96 | 发表于 2007-04-03 00:18 |
| 银牌会员 发帖 931 积分 1,928 | |
|
其实这样也行啊
@echo off for /r e:\ %%i in (*.txt) do ( if /i "%%~nxi"=="test.txt" echo "%%~dpi" ) pause |
|
| 第10楼 senjieg | 发表于 2007-04-27 09:47 |
| 新手上路 发帖 5 积分 10 | |
|
又学到不少 又学到不少
|
|
| 第11楼 taozicici | 发表于 2007-04-30 04:00 |
| 新手上路 发帖 6 积分 12 | |
|
我晕
各位都是高手,我初来乍到,还望关照....就连DIR有命令我都好多不懂了 郁闷 |
|
| 第12楼 ccuu668 | 发表于 2007-05-02 15:28 |
| 初级用户 发帖 29 积分 57 | |
|
顶起了.都是些高人.强呀!
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |