本帖最后由 slore 于 2011-12-1 11:55 编辑
回复 12# 小胖狐狸
这种需求也是可能有的吧,不一定是自己制造麻烦。
1.别的计算机导出列表(现在无法去在那个计算机上执行dir /S /B)
2.采集时点不同。
即使是本机,这些文件删除了等等原因,现在再DIR一次结果无法重现。
3.即使按你想的那样,最好用正则筛选 .*关键字.*$ ,关键字结尾的行筛出来。
避免
C:\关键字\1.txt
C:\关键字\1\haha.txt
把子文件及子目录全列出来啦。
回复楼主:
本人表示这个很简单。
一看题目能想到有2种方案,其实本质是一种。
逻辑代码就10行左右。
方案1:
1.用findstr筛选出目录名和包含关键字的文件名的行
2.剩下用方案2(除取紫色文字表示的逻辑)
方案2:
for 读取文件{
if 是Dir开头表示文件夹
取出目录路径保存至 当前目录
else /*是文件名*/
取出文件名,和关键字比较OK的话,和 当前目录 拼接 输出(
}
方案1的好处是用findstr来过滤,可能效率比自己for高些。。。能把大部分无用数据清除掉。
逻辑上是一样的。
以1楼的数据为例(稍微改了下,为什么改你们应该明白):
-----------------------------------------------------------------------
Directory of c:\
2011-11-10 09:46 <DIR> 360Rec
2011-09-23 13:09 0 AUTOEXEC.BAT
2011-11-10 17:16 0 COMLOG.txt
2011-09-23 13:09 0 CONFIG.SYS
2011-09-23 13:09 0 Directory
2011-09-23 13:16 <DIR> Documents and Settings
2011-11-11 16:21 <DIR> Program Files
2011-11-11 11:20 <DIR> WINDOWS
Directory of C:\Perl\html\lib\Attribute
2011-09-25 22:03 <DIR> .
2011-09-25 22:03 <DIR> ..
2011-09-25 22:03 60,993 COMLOG.txt
1 File(s) 60,993 bytes
Directory of C:\Perl\html\lib
2011-11-11 11:20 <DIR> COMLOG
Directory of C:\Perl\html\lib\COMLOG
2011-09-25 22:03 <DIR> .
2011-09-25 22:03 <DIR> ..
2011-09-25 22:03 60,993 xxae.txt
1 File(s) 60,993 bytes
------------------------------------------------------------------------
findstr /r /i "^Directory .*comlog.*$" c:\a.txt
输出结果:- Directory of c:\
- 2011-11-10 17:16 0 COMLOG.txt
- Directory of C:\Perl\html\lib\Attribute
- 2011-09-25 22:03 60,993 COMLOG.txt
- Directory of C:\Perl\html\lib
- 2011-11-11 11:20 <DIR> COMLOG
- Directory of C:\Perl\html\lib\COMLOG
复制代码
|