[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理怎样筛选用dir命令列出的文件目录的?请详细看问题的关健。

本帖最后由 ilovebath 于 2011-11-21 10:31 编辑

用dir命令列出的文件目录的筛选

这个问题的关健是:我已经用dir命令列出了一个a.txt的文件,我现在是想在这一个a.txt文件里,找到我想到的,并不是重新在磁盘里找文件。这是关健。...............................

比如:
dir /s命令列出的目录和文件 a.txt 如下:

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: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\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



我想得到的结果是a.txt中,包含有comlog的字符,配置为*comlog*的文件,包含目录,写入到新文件里,并且最后的形式为:
c:\COMLOG.txt
C:\Perl\html\lib\Attribute\COMLOG.txt
C:\Perl\html\lib\COMLOG

一行一个,包含目录

本帖最后由 小胖狐狸 于 2011-11-17 15:52 编辑
  1. @echo off
  2. dir /S /B|findstr /i "comlog">b.txt
  3. type b.txt
  4. pause
复制代码

TOP

回复 2# 小胖狐狸


    失败。

TOP

dir/s/a/b c:\*comlog*.*>a.txt

TOP

回复 4# cutebe


    失败

TOP

回复  小胖狐狸


    失败。
ilovebath 发表于 2011-11-16 17:17



    你不会是要求我在findstr 后面再帮你加个不区分大小写的 /I 参数吧,你自己不知道把我代码里的小写换成大写么?
怎么个失败法?

TOP

回复 6# 小胖狐狸


    请你测试后再写代码行吗?
你不知道dir /s列出的a.txt本来就乱七八糟,这样根本在a.txt这个大文件里,找不到任何字符的。

TOP

回复 5# ilovebath


    看病只说一句“我难受”,有哪个神医能治好你的病?

TOP

个人解决此问题都是用WIMC或者FOR的
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

本帖最后由 Hello123World 于 2011-11-18 13:59 编辑
  1. @echo off
  2. (For /f "delims=" %%i in ('dir /s /b /a *.* ^|Findstr /i "comlog"') do echo %%~fi)>a.txt
  3. start a.txt
复制代码
dir /s /b /a *.* |Findstr /i "comlog">a.txt

弄复杂了,这样就可以。

TOP

回复 10# Hello123World


    请看此问题的关健。谢谢

TOP

本帖最后由 小胖狐狸 于 2011-11-24 10:43 编辑
回复  小胖狐狸


    请你测试后再写代码行吗?
你不知道dir /s列出的a.txt本来就乱七八糟,这样根本 ...
ilovebath 发表于 2011-11-17 16:05



    请问你仔细看了我的代码吗?请问你测试了我写的代码吗? 我写的不是只有 /s 一个参数,我还加了一个 /B 参数,这样列出来的a.txt还乱?请测试后在说话

刚看到你后来补充的所谓的问题的关键,这是人为制造麻烦然后要求别人来解决,我没兴趣也没能力解答这种劳民伤财、毫无意义的问题
你用 dir /S /B 导出的a.txt好处理得多,为什么非得要用dir /S 来导出一个不好处理的文件来要求别人帮你解决呢?
这个问题的关健是:我已经用dir命令列出了一个a.txt的文件,我现在是想在这一个a.txt文件里,找到我想到的,并不是重新在磁盘里找文件。这是关健。...............................

TOP

回复 12# 小胖狐狸


    终于有人懂我的意思了,谢谢你。仍然感谢你。哈哈。

TOP

回复 12# 小胖狐狸


赞同!
确实搞不清楚那伙人怎么想的。
你告诉他从北京到广州可以坐火车走京广线,他非要问徒步过去的话怎样游过黄河、翻越秦岭。

TOP

本帖最后由 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
输出结果:
  1. Directory of c:\
  2. 2011-11-10  17:16                 0 COMLOG.txt
  3. Directory of C:\Perl\html\lib\Attribute
  4. 2011-09-25  22:03            60,993 COMLOG.txt
  5. Directory of C:\Perl\html\lib
  6. 2011-11-11  11:20    <DIR>          COMLOG
  7. Directory of C:\Perl\html\lib\COMLOG
复制代码

TOP

返回列表